записать символ юникода в файл в php - не дублировать - PullRequest
2 голосов
/ 23 марта 2012

У меня есть строка Unicode, полученная через HTTP Post или извлеченная из БД (не имеет значения)

В PHP я проверил кодировку строки, используя "mb_detect_encoding", и получил UTF-8 в результате.

ТАК поэтому строка в Unicode.

Но как мне записать строку из php в выходной файл с правильной кодировкой

    $fd = fopen('myfile.php', "wb");
    fwrite($fd, $msg."\n");

Что я вижу, так это«à¤Ÿà ¥ ‡ à¤¸à ¥ ट» вместо фактической строки टेस्ट्

Вставьте «мусор» в Notepad ++, а затем из опции меню, выполнив «кодирование UTF-8», покажетправильный текст.

РЕДАКТИРОВАТЬ * РЕШЕНИЕ *

Извините, что опубликовал вопрос и сам нашел ответ.

Я нашел решение на следующем сайте http://www.codingforums.com/showthread.php?t=129270

function writeUTF8File($filename,$content) {
        $f=fopen($filename,"w");
        # Now UTF-8 - Add byte order mark
        fwrite($f, pack("CCC",0xef,0xbb,0xbf));
        fwrite($f,$content);
        fclose($f);
}

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

PHP не изменяет кодировку строки и ничего с ней не делает при записи в файл.Он просто сбрасывает байты строки (строки PHP на самом деле являются байтовыми массивами) в файл, точка.Если вы на самом деле получаете строку как UTF-8 и ничего с ней не делаете, кроме как записываете ее в файл, содержимое файла будет в кодировке UTF-8.Скорее всего, ваша проблема в том, что какое бы приложение вы не использовали для просмотра , файл не будет правильно считывать его в кодировке UTF-8.,Спецификация не требуется для UTF-8, и многие приложения имеют проблемы с ней.Это только помогает приложениям, которые иначе не могут (слишком глупо) обнаружить, что файл имеет кодировку UTF-8.Лучшее решение может заключаться в том, чтобы просто явно указать рассматриваемому приложению, что оно должно обрабатывать файл как кодировку UTF-8 при открытии файла.Или используйте лучшее приложение.

0 голосов
/ 23 марта 2012

Извините за то, что опубликовал вопрос и сам нашел ответ.

Я нашел решение на следующем сайте здесь

function writeUTF8File($filename,$content) {
        $f=fopen($filename,"w");
        # Now UTF-8 - Add byte order mark
        fwrite($f, pack("CCC",0xef,0xbb,0xbf));
        fwrite($f,$content);
        fclose($f);
}
0 голосов
/ 23 марта 2012

Вы должны указать strict параметр mb_detect_encoding, иначе вы получите много ложных срабатываний.

Кроме того, хотя выходные данные могут быть в формате UTF-8, вам придется указать правильноезаголовки ( кодировка содержимого ) и / или метатег charset (если это HTML).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...