Comment définir un fichier texte ENCODING (par exemple UTF-8) en PHP?
Laisse-moi te montrer mon problème. Ceci est mon code:
<?php
file_put_contents('test.txt', $data); // data is some non-English text with UTF-8 charset
?>
Sortie: اÙ
!
fwrite()
a une sortie similaire.
Mais lorsque je crée le test.txt
avec le bloc-notes et que je définis le jeu de caractères UTF-8 , le résultat est ce que je veux .. Je veux définir le jeu de caractères dans le fichier PHP.
Maintenant, voici ma question: Comment définir le codage de fichier texte par PHP?
PHP n’applique pas d’encodage lors du stockage de texte dans un fichier: il stocke les données exactement telles qu’elles sont présentées dans la chaîne.
Vous dites que vous avez des problèmes pour ouvrir le fichier dans notepad.exe
. Cet éditeur de texte n'est pas très bon pour deviner l'encodage du fichier que vous ouvrez; Si le texte est codé en UTF-8, vous devez choisir de l'ouvrir en tant que UTF-8. Utilisez un autre éditeur de texte si possible. Notepad ++ est un substitut populaire.
Si vous devez utiliser notepad.exe
, en dernier recours, écrivez un Byte Order Mark dans le fichier avant d'écrire quoi que ce soit d'autre; cela le fera reconnaître le fichier au format UTF-8 tout en le rendant potentiellement inutilisable à d'autres fins (voir l'article de Wikipedia pour plus de détails).
file_put_contents("file.txt", "\xEF\xBB\xBF" . $data);
Vous pouvez essayer ceci en utilisant mb_convert_encoding
$data = mb_convert_encoding($data, 'UTF-8', 'auto');
file_put_contents('test.txt', $data);
Vérifiez également iconv .
Update: (essayez ceci et trouvez le bon encodage pour votre texte)
foreach(mb_list_encodings() as $chr){
echo mb_convert_encoding($data, 'UTF-8', $chr)." : ".$chr."<br>";
}
Aussi, essayez ceci sur GitHub .
Essayer:
file_put_contents('test.txt', utf8_encode($data));
Vous pouvez créer une fonction qui convertit un tableau de chaînes en un tableau de chaînes codé en utf8 et une autre pour les décoder et les écrire dans un fichier bloc-notes.
<?php
function utf8_string_encode(&$array){
$myencode = function(&$value,&$key){
if(is_string($value)){
$value = utf8_encode($value);
}
if(is_string($key)){
$key = utf8_encode($key);
}
if(is_array($value)){
utf8_string_encode($value);
}
};
array_walk($array,$func);
return $array;
}
?>