jerryone3 Gamer | J'ai testé, ça n'aide pas. les 3 premiers caractères sont remplacés par un ?, c'est tout.
[EDIT]
Trouvé ! Je donne la solution, au cas où quelqu'un ait le même problème, ça lui permettra de conserver les cheveux que je n'ai plus :
Il y a un élément qui s'appelle le BOM :
<lien type="wikipedia" url="Marque_d'ordre_des_octets">http://fr.wikipedia.org/wiki/Marque_d%27ordre_des_octets</lien>
Celui-ci était inclus dans mon fichier, et c'est son marquage qu'on voit au début du premier champ, les deux caractères étranges. Il existe plusieurs marquages possibles, en fonction du format du fichier, qu'une fonction trouvée sur php.net vous permet de trouver facilement :
Code :
- <?php
- // Unicode BOM is U+FEFF, but after encoded, it will look like this.
- define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
- define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
- define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF));
- define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
- define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
- function detect_utf_encoding($filename) {
- $text = file_get_contents($filename);
- $first2 = substr($text, 0, 2);
- $first3 = substr($text, 0, 3);
- $first4 = substr($text, 0, 3);
-
- if ($first3 == UTF8_BOM) return 'UTF-8';
- elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';
- elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';
- elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';
- elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';
- }
- ?>
|
La solution : trouver avec quel encodage ça fonctionne bien, et utiliser mb_convert_encoding. On peut le faire facilement grâce à ceci :
Code :
- foreach(mb_list_encodings() as $chr){
- echo mb_convert_encoding($text, 'UTF-8', $chr)." : ".$chr."<br>";
- }
|
Voila voila ! Message édité par jerryone3 le 06-01-2011 à 17:53:57 ---------------
Si ça n'explose pas, vous ne faites pas avancer la science.
|