2009-03-16 14 views
5

Sto utilizzando CURL per importare del codice. Tuttavia, in francese, tutti i personaggi escono divertenti. Ad esempio: Bonjour ...Problema di codifica caratteri di importazione CURL

Non ho accesso per modificare nulla sul codice importato. C'è qualcosa che posso fare al mio fianco per risolvere questo problema?

Grazie

+0

"La vostra situazione non è chiara dove viene PHP entrare è il contenuto che si sta scaricando codice PHP Cosa stai usando per vedere il testo in seguito? " -dalla risposta di Jon Skeet sotto –

+0

La tua situazione non è chiara. Da dove viene PHP? Il contenuto che stai scaricando è il codice PHP? Che cosa stai usando per visualizzare il testo in seguito? È quasi certamente solo un caso di gestire i dati scaricati nella codifica appropriata. Tuttavia, è necessario sapere quale codifica è (guarda le intestazioni HTTP per un possibile suggerimento, anche se potrebbe non essere stato impostato correttamente) e come usare * la codifica corretta. Non possiamo aiutarti su quest'ultimo punto fino a quando non sapremo cosa stai facendo con i dati dopo averli recuperati. –

risposta

14

Come Jon Skeet ha sottolineato che è difficile da capire la vostra situazione, se si ha accesso solo al testo finale, si può provare a utilizzare iconv per cambiare la codifica del testo.

I.e.

$text = iconv("Windows-1252","UTF-8",$text); 

Ho avuto simile problema tempo fa (con lingua italiana e caratteri speciali) e ho risolto in questo modo.

Provare una combinazione diversa (UTF-8, ISO-8859-1, Windows-1252).

+0

Documentazione per iconv di PHP: http://php.net/manual/en/book.iconv.php –

3

PHP sembra utilizzare UTF-8 di default, così ho trovato i seguenti lavori

$ text = iconv ("UTF-8", "Windows-1252", $ text);

2

Attualmente sto riscontrando un problema simile, sto provando a scrivere un semplice importatore html <title> cia cURL. Quindi ho intenzione di dare un'idea di quello che ho fatto fino ad ora:

  1. Recuperare l'HTML via cURL
  2. Verificare se c'è qualche accenno di codifica sulle intestazioni di risposta tramite curl_getinfo() e abbinarlo tramite regex
  3. analizzare il codice HTML allo scopo di guardare la tipo di contenuto meta e il tag <title> (sì, i know the consequences)
  4. confrontare i due tipo di contenuto, intestazione e meta e scegliere la meta uno se è diverso, perché sappiamo che nessuno si preoccupa della loro configurazione httpd e lì sono un sacco di soluzioni di sporco usandolo
  5. iconv() la stringa
  6. Whish di tutti i giorni che quando qualcuno non segue le norme $DEITY lo punisce/lei fino alla fine dei giorni, perché mi avrebbe salvare la meta analisi
3

Si potrebbe sostituire il

$data = curl_exec($ch); 

da

$data = utf8_decode(curl_exec($ch)); 

Ho avuto lo stesso problema e ha funzionato bene per me.

+0

IMPORTANTE: durante la conversione di dati UTF8 che contengono il segno EURO NON UTILIZZARE la funzione utf_decode. utf_decode converte i dati in charset ISO-8859-1. Ma il set di caratteri ISO-8859-1 non contiene il simbolo EURO, quindi il segno dell'EURO sarà convertito in un carattere punto interrogativo '?' Per convertire correttamente i dati UTF8 con il segno EURO è necessario utilizzare: iconv ("UTF-8", "CP1252", $ dati) – Thoman

6

Ho avuto un problema simile. Ho provato a scorrere tutte le combinazioni di input e output charsets. Niente ha aiutato! :(

Tuttavia sono stato in grado di accedere al codice che in realtà andò a prendere i dati e questo è dove il colpevole ha mentito. I dati sono stati recuperati tramite CURL. L'aggiunta di

curl_setopt($ch,CURLOPT_BINARYTRANSFER,true); 

riparato.

Un pratico set di codice per provare tutte le possibili combinazioni di un elenco di set di caratteri:.??

$charsets = array( 
     "UTF-8", 
     "ASCII", 
     "Windows-1252", 
     "ISO-8859-15", 
     "ISO-8859-1", 
     "ISO-8859-6", 
     "CP1256" 
     ); 

foreach ($charsets as $ch1) { 
    foreach ($charsets as $ch2){ 
     echo "<h1>Combination $ch1 to $ch2 produces: </h1>".iconv($ch1, $ch2, $text_2_convert); 
    } 
}