Манипулирование тайскими символами в PHP

Я борюсь за то, чтобы тайские персонажи и PHP работали вместе. Вот что я хотел бы сделать:

<?php
   mb_internal_encoding('UTF-8');
   $string = "ทาง";
   echo $string[0];
?>

Но вместо того, чтобы дать мне первый символ $string (ท), я просто получаю некоторые испорченные результаты. Тем не менее, отображение $ string само по себе работает нормально.

Сам файл, конечно же, UTF-8. Тип содержимого в заголовке также установлен в UTF-8. Я изменил необходимые строки в php.ini в соответствии с этим сайтом.

utf8_encoding () и utf8_decoding() также не помогают. Может быть, у кого-нибудь из вас есть идея?

1 ответ

Решение

В PHP при доступе к строке с $string[0] это не возвращает первый символ, но первый байт.

Вместо этого вы должны использовать mb_substr. Например:

mb_substr($string, 0, 1, 'UTF-8');

Примечание: так как вы используете mb_internal_encoding('UTF-8'); Вы также можете игнорировать последний параметр.


Это происходит потому, что PHP не знает о кодировке строки (то есть: кодировка не сохраняется в строковом объекте). По умолчанию он будет обрабатываться как ANSI/ASCII. Если вы не хотите этого, вы должны использовать функцию многобайтовой строки (mb_*).

Когда вы установите mb_internal_encoding('UTF-8'); ты говоришь это использовать UTF-8 для всей функции многобайтовой строки, но не для чего-либо еще.

Другие вопросы по тегам