2009-03-16 5 views
5

J'utilise CURL pour importer du code. Cependant, en français, tous les personnages sortent marrants. Par exemple: Bonjour ...Problème d'encodage de caractères import CURL

Je n'ai pas accès à modifier quoi que ce soit sur le code importé. Y at-il quelque chose que je puisse faire de mon côté pour résoudre ce problème?

Merci

+0

« Votre situation est peu claire Où PHP venir en est le contenu que vous téléchargez code PHP Qu'est-ce que utilisez-vous pour voir le texte après? " -de la réponse de Jon Skeet ci-dessous –

+0

Votre situation n'est pas claire. Où est-ce que PHP arrive? Est-ce que le contenu que vous téléchargez du code PHP? Qu'est-ce que vous utilisez pour voir le texte après? C'est presque certainement juste un cas de manipulation des données téléchargées dans l'encodage approprié. Cependant, vous aurez besoin de savoir quel est le codage (regardez les en-têtes HTTP pour une indication possible, même si elle n'a pas été correctement définie) et comment * utiliser * le bon encodage. Nous ne pouvons pas vous aider sur ce dernier point jusqu'à ce que nous sachions ce que vous faites avec les données après l'avoir récupéré. –

Répondre

14

Comme Jon Skeet fait remarquer qu'il est difficile de comprendre votre situation, si vous avez uniquement accès au texte final, vous pouvez essayer d'utiliser iconv pour changer le codage de texte.

I.e.

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

J'ai eu il y a le temps d'émission similaire (avec la langue italienne et caractères spéciaux) et je l'ai résolu de cette façon. Essayez une combinaison différente (UTF-8, ISO-8859-1, Windows-1252).

+0

Documentation pour iconv de PHP: http://php.net/manual/fr/book.iconv.php –

3

PHP semble utiliser UTF-8 par défaut, donc je l'ai trouvé les œuvres suivantes

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

2

Je souffre actuellement d'un problème similaire, j'essaie d'écrire un simple html <title> importateur cia cURL. Donc, je vais donner une idée de ce que je l'ai fait jusqu'à présent:

  1. Récupérer le HTML via cURL
  2. Vérifiez s'il n'y a aucune trace de codage sur les en-têtes de réponse via curl_getinfo() et correspondent via regex
  3. Parse le code HTML dans le but de regarder le type de contenu meta et la balise <title> (oui, i know the consequences)
  4. Comparez les deux type de contenu, en-tête et méta et choisissez la méta un si elle est différente, parce que nous savons que personne ne se soucie de leur configuration httpd et là sont beaucoup de solutions de contournement de terre utilisait
  5. iconv() la chaîne
  6. Whish tous les jours que lorsque quelqu'un ne respecte pas les normes $DEITY le punit/elle jusqu'à la fin des jours, parce qu'il me sauverait l'analyse syntaxique méta
3

Vous pouvez remplacer votre

$data = curl_exec($ch); 

par

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

J'ai eu ce même problème et cela a bien fonctionné pour moi.

+0

IMPORTANT: lors de la conversion de données UTF8 contenant le signe EURO, NE PAS UTILISER la fonction utf_decode. utf_decode convertit les données en jeu de caractères ISO-8859-1. Mais le charset ISO-8859-1 ne contient pas le signe EURO, par conséquent le signe EURO sera converti en un point d'interrogation '?' Afin de convertir correctement les données UTF8 avec le signe EURO, vous devez utiliser: iconv ("UTF-8", "CP1252", $ data) – Thoman

6

J'ai eu un problème similaire. J'ai essayé de faire défiler toutes les combinaisons de jeux de caractères d'entrée et de sortie. Rien n'a aidé! :(

Cependant j'ai pu accéder au code qui alla chercher réellement les données, ce qui est là le coupable a menti. Les données ont été rapatriée par cURL. Ajout

curl_setopt($ch,CURLOPT_BINARYTRANSFER,true); 

le fixe.

Un ensemble pratique de code pour essayer toutes les combinaisons possibles d'une liste de jeux de caractères.?

$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); 
    } 
}