Манипулирование тайскими символами в 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
для всей функции многобайтовой строки, но не для чего-либо еще.