Как установить текстовый файл ENCODING (например, UTF-8) в PHP?
Позвольте мне показать вам свою проблему. Это мой код:
<?php file_put_contents('test.txt', $data); // data is some non-English text with UTF-8 charset ?>
Выход: اÙ
!
fwrite()
имеет аналогичный вывод.
Но когда я создаю test.txt
помощью блокнота и устанавливаю кодировку UTF-8, выход – это то, что я хочу. Я хочу установить кодировку в файле PHP.
Теперь это мой вопрос: как установить кодировку текстового файла с помощью PHP?
PHP не применяет кодировку при хранении текста в файле: он хранит данные точно так же, как и в строке.
Вы отмечаете, что у вас есть проблемы с открытием файла в файле notepad.exe
. Этот текстовый редактор не очень хорошо угадывает кодировку файла, который вы открываете; если текст закодирован в UTF-8, вы должны выбрать его как UTF-8. Используйте другой текстовый редактор, если это возможно. Notepad ++ – популярная замена.
Если вы должны использовать notepad.exe
, в крайнем случае, напишите знак байта в файл, прежде чем писать что-нибудь еще; это заставит его распознавать файл как UTF-8, в то же время потенциально делая файл непригодным для других целей (подробности см. в статье Википедии).
file_put_contents("file.txt", "\xEF\xBB\xBF" . $data);
Вы можете попробовать это, используя mb_convert_encoding
$data = mb_convert_encoding($data, 'UTF-8', 'auto'); file_put_contents('test.txt', $data);
Также проверьте значок .
Обновление: (попробуйте это и найдите правильную кодировку для своего текста)
foreach(mb_list_encodings() as $chr){ echo mb_convert_encoding($data, 'UTF-8', $chr)." : ".$chr."<br>"; }
Также попробуйте это на GitHub .
Пытаться:
file_put_contents('test.txt', utf8_encode($data));
Вы можете создать функцию, которая преобразует строковый массив в строковый массив с кодировкой utf8, а другой – для декодирования и записи в файл блокнота для вас.
<?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; } ?>