Как установить кодировку текстового файла в PHP?

Как установить текстовый файл 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; } ?>