Неанглийские символы в PHP - PullRequest
1 голос
/ 06 мая 2011

У меня проблема с записью неанглийских символов в файл (.txt) с помощью php.это мой код:

$str = "â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï";
$str = htmlentities($str, ENT_QUOTES, mb_detect_encoding($str));
$str =htmlspecialchars_decode(html_entity_decode($str),ENT_QUOTES);
$f = fopen("test.txt","w");
fputs($f,$str);
fclose($f);

Когда я открываю файл, результат будет: â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï

, как вы видите, например, символ евро по-прежнему не отображаются правильно в файле и других символов.

Кто-нибудь есть идея, чтобы решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Преобразование в € выполняется функцией htmlentities(); так как вы кодируете в HTML-сущности и декодируете сразу после этого, я бы предложил оставить этот шаг:

$str = "â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï";
$f = fopen("test.txt","w");
fputs($f,$str);
fclose($f);
1 голос
/ 06 мая 2011

Предполагая, что вы хотите сохранить этот бизнес кодирования / декодирования (похоже, вы пытаетесь использовать процесс кодирования / декодирования для преобразования между наборами символов?):

На этапе кодирования вы используете mb_detect_encoding во входной строке и передайте ее в htmlentities, что позволяет правильно определить знак евро на вашем входе (большую часть времени).

Однако на этапе декодирования вы неукажите любую кодировку, поэтому html_entity_decode выберет ISO-8859-1, который не включает знак евро.

Если вы хотите оставить этот блок кода в основном таким же, вам нужно выбрать кодировку длядекодирование к этому включает все символы, которые вы хотите (например, UTF-8 или ISO-8859-15).

Редактировать: Вот пример, основанный на вашем коде (я выбрал ISO-8859-15, но вам действительно нужно знать или решить, какой выходной набор символов вы хотите):

$str = "â€êþÿûîœøîô‘ë’ðüïlæ߀¿×÷¡ï";
$str = htmlentities($str, ENT_QUOTES, mb_detect_encoding($str));
$str = html_entity_decode($str, ENT_QUOTES, 'ISO-8859-15');
$f = fopen("test.txt","w");
fputs($f,$str);
fclose($f);
...