2013-12-08 4 views
3

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

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

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

Файл сам, конечно же, UTF-8. Content-Type в заголовке также установлен в UTF-8. Я изменил необходимые строки в php.ini в соответствии с this site.

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

ответ

4

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

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

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

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


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

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

+0

Это имеет смысл. Я этого не знал, большое спасибо. – user3079836