Convertir un série de caractères pour le charset UTF-8

Convertir un série de caractères pour le charset UTF-8 - HTML/CSS - Programmation

Marsh Posté le 14-08-2009 à 15:14:06    

J'ai réalisé un forum qui fonctionne bien, au moment d'enregistrer les messages je souhaite convertir les caractères pour le charset UTF-8.
 
J'utilise la donc la fonction htmlentities() de cette façon :  

Code :
  1. $message = (htmlentities($message, NULL, 'UTF-8'));


 
 
Les caractères ne sont pas converties ? Existe t-il une méthode ?
 
 
Merci


Message édité par alx067 le 14-08-2009 à 15:14:29
Reply

Marsh Posté le 14-08-2009 à 15:14:06   

Reply

Marsh Posté le 14-08-2009 à 15:27:14    

htmlentities ne convertit absolument pas en utf-8.
 
Faut déjà voir $message en quoi il est encodé. Sinon faudra utiliser la fonction utf8_encode()

Reply

Marsh Posté le 14-08-2009 à 18:38:09    

J'ai tenté avec cette ligne de code :

Code :
  1. $message = utf8_encode($message);


 
les caractères deviennent "illisibles"...
 
et j'ai une problème de magic_quotes... (un slash devant les apostrophes).
 
...
 
Au fait $message est encodé comme ceci :
é = é
à = à
è = è
û = û
ö = ö
etc.


Message édité par alx067 le 14-08-2009 à 18:43:55
Reply

Marsh Posté le 14-08-2009 à 20:43:24    

Comment ça illisible ? Un point d'interrogation ? Un é ? Des trucs chinois ?

Reply

Marsh Posté le 14-08-2009 à 21:47:35    

Quelque chose comme ceci :
 
éèà à éèà Ã.

Reply

Marsh Posté le 15-08-2009 à 14:44:57    

Donc t'as bien de l'utf-8. Mais affiché dans un environnement iso-8859-1. Vérifie tes entêtes HTTP

Reply

Marsh Posté le 15-08-2009 à 16:28:57    

Les balises méta indiquent bien un charset UTF-8
 

Code :
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


 
 
Je ne comprends pas... ?


Message édité par alx067 le 15-08-2009 à 16:29:28
Reply

Marsh Posté le 15-08-2009 à 16:36:40    

Et le vrai entête HTTP ?

Reply

Marsh Posté le 15-08-2009 à 16:58:39    

Sous FF les propriétés indiquent un encodage en UTF-8

Reply

Marsh Posté le 15-08-2009 à 17:48:57    

Et en virant l'utf8_encode (qui devrait donc ne pas être là si la page qui post la requête est déjà en utf-8) ?

Reply

Marsh Posté le 15-08-2009 à 17:48:57   

Reply

Marsh Posté le 15-08-2009 à 20:59:27    

Il n'y a plus de codage, on obtient à nouveau un codage "neutre" où les lettres ne sont plus codées... ("élèments" au lieu de "&#233;l&#232;ments" en UTF-8).


Message édité par alx067 le 15-08-2009 à 20:59:43
Reply

Marsh Posté le 15-08-2009 à 21:03:42    

Je crois que tu mixes tout un tas de notions là :D
 
Vire tout tes utf8_decode et htmlentities. Occupe-toi juste de déclarer le bon encoding (dans la meta ou dans l'entête HTTP), et ça roule.
 
Y'a pas d'encodage "neutre."

Reply

Marsh Posté le 19-08-2009 à 22:13:37    

Le sujet est parti "en vrille", je crois.
 
il s'agisais simplement de convertir un texte écrit de "élèments" à "&#233;l&#232;ments". C'est tout.

Reply

Marsh Posté le 27-08-2009 à 19:40:13    

Up

Reply

Marsh Posté le 28-08-2009 à 13:24:34    

Bonjour,
 
Je crois qu'il faut tout simplement indiqué le charset de la chaine d'origine.
Donc essayer :

$message = (htmlentities($message, NULL, "CP1252" ));


Le résultat devrait être la transformation du "é" en "eacute;", etc, ce qui premettra d'incoporer ce texte dans une page contenant de UTF-8. N.B. Si ca ne marche pas, essyer "ISO8859-1" au lieu de "CP1252".

Reply

Marsh Posté le 06-10-2009 à 15:56:45    

J'ai eu beaucoup de mal à comprendre le UTF-8 puis j'ai réalisé un fichier texte qui converti automatiquement les caractères au format UTF-8. Cela doit prendre des ressources serveur mais j'ai pas trouvé mieux pour le moment ; l'avantage c'est qu'il est possible de la modifier en temps réel pour toutes les conversions. Il faudra le compléter et approfondir le travail...
 

Code :
  1. <?php
  2. $f = str_replace("À", "&#192;", $f);
  3. $f = str_replace("Á", "&#193;", $f);
  4. $f = str_replace("Â", "&#194;", $f);
  5. $f = str_replace("Ã", "&#195;", $f);
  6. $f = str_replace("Ä", "&#196;", $f);
  7. $f = str_replace("Å", "&#197;", $f);
  8. $f = str_replace("Ç", "&#199;", $f);
  9. $f = str_replace("È", "&#200;", $f);
  10. $f = str_replace("É", "&#201;", $f);
  11. $f = str_replace("Ê", "&#202;", $f);
  12. $f = str_replace("Ë", "&#203;", $f);
  13. $f = str_replace("Ì", "&#204;", $f);
  14. $f = str_replace("Í", "&#205;", $f);
  15. $f = str_replace("Î", "&#206;", $f);
  16. $f = str_replace("Ï", "&#207;", $f);
  17. $f = str_replace("Ò", "&#208;", $f);
  18. $f = str_replace("Ó", "&#209;", $f);
  19. $f = str_replace("Ô", "&#210;", $f);
  20. $f = str_replace("Õ", "&#211;", $f);
  21. $f = str_replace("Ö", "&#212;", $f);
  22. $f = str_replace("Ù", "&#217;", $f);
  23. $f = str_replace("Ú", "&#218;", $f);
  24. $f = str_replace("Û", "&#219;", $f);
  25. $f = str_replace("Ü", "&#220;", $f);
  26. $f = str_replace("Ý", "&#221;", $f);
  27. $f = str_replace("à", "&#224;", $f);
  28. $f = str_replace("á", "&#225;", $f);
  29. $f = str_replace("â", "&#226;", $f);
  30. $f = str_replace("ã", "&#227;", $f);
  31. $f = str_replace("ä", "&#228;", $f);
  32. $f = str_replace("å", "&#229;", $f);
  33. $f = str_replace("ç", "&#231;", $f);
  34. $f = str_replace("è", "&#232;", $f);
  35. $f = str_replace("é", "&#233;", $f);
  36. $f = str_replace("ê", "&#234;", $f);
  37. $f = str_replace("ë", "&#235;", $f);
  38. $f = str_replace("ì", "&#236;", $f);
  39. $f = str_replace("í", "&#237;", $f);
  40. $f = str_replace("î", "&#238;", $f);
  41. $f = str_replace("ï", "&#239;", $f);
  42. $f = str_replace("ð", "&#240;", $f);
  43. $f = str_replace("ñ", "&#241;", $f);
  44. $f = str_replace("ò", "&#242;", $f);
  45. $f = str_replace("ó", "&#243;", $f);
  46. $f = str_replace("ô", "&#244;", $f);
  47. $f = str_replace("õ", "&#245;", $f);
  48. $f = str_replace("ö", "&#246;", $f);
  49. $f = str_replace("ù", "&#249;", $f);
  50. $f = str_replace("ú", "&#250;", $f);
  51. $f = str_replace("û", "&#251;", $f);
  52. $f = str_replace("ü", "&#252;", $f);
  53. $f = str_replace("ý", "&#253;", $f);
  54. $f = str_replace("ÿ", "&#255;", $f);
  55. $f = str_replace("\'", "'", $f); // pour les magic_quotes
  56. ?>


 
Sur la page courante on intègre la ligne de code suivante :  

Code :
  1. $f = $a_convertir;
  2. include("NORMAL-UTF-8.txt" );
  3. $a_convertir =  $f;


 
On peut également faire un fichier dans l'autre sens ou convertir les ISOs vers UTF-8 et vice et versa ou d'autre conversion.
 
Avec un peu de travail, un seul fichier texte suffit à un site ; voir un seul fichier pour plusieurs sites (avec file_get_contents ?)


Message édité par alx067 le 06-10-2009 à 16:40:09
Reply

Marsh Posté le 06-10-2009 à 16:52:53    

Evite à tout prix autant de str_replace. Met tous tes trucs dans un tableau, et utilise strtr

Reply

Marsh Posté le 06-10-2009 à 16:53:26    

Et pis en fait y'a pas besoin de tes fonctions pour ces caractères-là, un preg_replace suffit + une fonction custom

Reply

Marsh Posté le 06-10-2009 à 16:55:49    

Du genre :

Code :
  1. function utf8Ord($c)
  2. {
  3.    $ud = 0;
  4.  
  5.    $ord0 = ord($c{0});
  6.  
  7.    if($ord0 >= 0 && $ord0 <= 127) {
  8.        $ud = $ord0;
  9.  
  10.    } elseif($ord0 >= 192 && $ord0 <= 223) {
  11.        $ud = ($ord0 - 192) * 64 + (ord($c{1}) - 128);
  12.  
  13.    } elseif($ord0 >= 224 && $ord0 <= 239) {
  14.        $ud = ($ord0 - 224) * 4096 + (ord($c{1}) - 128) * 64 + (ord($c{2}) - 128);
  15.  
  16.    } elseif($ord0 >= 240 && $ord0 <= 247) {
  17.        $ud = ($ord0 - 240) * 262144 + (ord($c{1}) - 128) * 4096 + (ord($c{2}) - 128) * 64 + (ord($c{3}) - 128);
  18.  
  19.    } elseif($ord0 >= 248 && $ord0 <= 251) {
  20.        $ud = ($ord0 - 248) * 16777216 + (ord($c{1}) - 128) * 262144 + (ord($c{2}) - 128) * 4096 + (ord($c{3}) - 128) * 64 + (ord($c{4}) - 128);
  21.  
  22.    } elseif($ord0 >= 252 && $ord0 <= 253) {
  23.        $ud = ($ord0 - 252) * 1073741824 + (ord($c{1}) - 128) * 16777216 + (ord($c{2}) - 128) * 262144 + (ord($c{3}) - 128) * 4096 + (ord($c{4}) - 128) * 64 + (ord($c{5}) - 128);
  24.  
  25.    } elseif($ord0 >= 254 && $ord0 <= 255) {
  26.        throw new Exception('Invalid utf-8 character');
  27.    }
  28.  
  29.    return $ud;


Et on utilise preg_replace :

Code :
  1. $string = preg_replace('/([^\x00-\x7F])/eu', "'&#' . utf8Ord('\\1') . ';'", $string);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed