Простое сравнение в utf8, неправильный результат? - PullRequest
2 голосов
/ 08 марта 2012

этот код печатает "нет", но он должен печатать "хорошо", и utf8 кодирует два разных

$a="کیهان";
$b="كيهان";
echo utf8_encode($a)."==".utf8_encode($b)."<br>";
if(utf8_encode($a)==utf8_encode($b))
    echo "ok";
else
    echo "no";

и результат:

Ú©ÛÙاÙ==ÙÙÙاÙ
no

что это ©?

edit: $ a копируется и $ b набирается

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

ваши строки в юникоде отличаются от начальных ... показаны здесь с пробелами, чтобы выделить точку:

$a="ک ی ه ن";
$b="ك ي ه ن";

РЕДАКТИРОВАТЬ: ради любопытства ...

screen shot of text in sublime editor

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

1 голос
/ 08 марта 2012

EDIT:

Билли совершенно прав (+1) в том, почему строки не равны. Этот ответ может объяснить, почему вы видите мусорный текст после преобразования.

Я предполагаю, что ваша оригинальная кодировка не соответствует ISO-8859-1.

См. Первый комментарий в документах .

Обратите внимание, что utf8_encode преобразует только строку, закодированную в ISO-8859-1 до UTF-8. Более подходящее название для этого было бы "Iso88591_to_utf8". Если ваш текст не закодирован в ISO-8859-1, вы делаете не нужна эта функция. Если ваш текст уже в UTF-8, вы не нужна эта функция. Фактически, применяя эту функцию к тексту, который не кодированный в ISO-8859-1, скорее всего, просто искажает этот текст.

Вместо этого вы можете захотеть iconv .

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