Вот мой код:
<?php header("Content-Type: text/html; charset=UTF-8"); header("Content-Type: application/x-javascript; charset=UTF-8"); $fName = "demo.txt"; $str = "óé"; fid = fopen($fName, 'wb') or die("can't open file"); // Open file fwrite($fid, $str); // Write to file fclose($fid); // Close file ?>
На экран выводится:
óéü
Когда я открываю файл, я получаю:
óéü
Я пытаюсь сохранить большие объемы данных с помощью fwrite, но символы не кодируются правильно в точке сохранения файла.
Заранее спасибо.
fwrite
хранит строки двоичные. Он не выполняет конвертацию кодировки. Скорее всего, ваш PHP-скрипт находится в неправильной кодировке и, таким образом, исходная строка "óéü"
. Покажите нам bin2hex($str)
и bin2hex(file_get_contents('demo.txt'))
если вы не можете самостоятельно его отладить.
Существуют некоторые общие варианты решения таких проблем:
utf8_encode($str)
перед сохранением. fwrite($f, "\xEF\xBB\xBF")
iconv()
recode L1..UTF8 script.php
какую программу вы используете для «открытия» файла? эта программа может быть проблемой.
Сначала вставьте utf_encode внутри fwrite, например:
<?php $fName = "demo.txt"; $str = "óé"; fid = fopen($fName, 'wb') or die("can't open file"); // Open file fwrite($fid, utf_encode($str)); // Write to file fclose($fid); // Close file ?>
Затем не забудьте сохранить свой PHP-скрипт с UTF-8 without BOM
кодировки UTF-8 without BOM
. Для этого используйте любой расширенный редактор кода, например Notepad ++.