在PHP中操纵泰语字符

时间:2013-12-08 13:10:11

标签: php encoding multibyte thai southeast-asian-languages

我正在努力让泰国角色和PHP一起工作。这就是我想做的事情:

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

但是我没有给我$ string(ท)的第一个字符,而是让一些混乱的输出。但是,显示$ string本身效果很好。

文件本身当然也是UTF-8。标题中的Content-Type也设置为UTF-8。我根据this site更改了php.ini中的必要行。

utf8_encoding()和utf8_decoding()也没有帮助。也许你们中有人有想法?

1 个答案:

答案 0 :(得分: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表示所有多字节字符串函数,但不能用于其他任何字符串函数。