变音符号和mb_substr的问题

时间:2010-01-15 11:56:52

标签: php unicode substr multibyte

我正在使用mb_substr函数切换带变音符号的unicode字符串,但它可以使用简单的substr函数。它将unicode字符分成两半,显示标记为菱形的问题。

E.g。

echo mb_substr('ááááá', 0, 5); //Displays áá�

可能出现什么问题?

2 个答案:

答案 0 :(得分:7)

如果我没有将编码指定为mb_substr的最后一个参数,我会遇到同样的问题:它至少在我的服务器上默认为ISO-8859-1


但是,如果我正确地将编码设置为UTF-8,它就可以正常工作:

echo mb_substr('ááááá', 0, 5, 'UTF-8');

在浏览器中获取正确的显示:

ááááá


请参阅mb_substr (引用,强调我的)

string mb_substr  ( string $str  , int $start  [, 
    int $length  [, string $encoding  ]] )
  

encoding参数是   字符编码。 如果是的话   省略,内部字符   将使用编码值

答案 1 :(得分:1)

我遇到了同样的问题,上面的答案对我也有帮助。除了设置php.ini或使用ini_set()之外,使用mb_internal_encoding('utf-8');utf-8可能会根据您的选择进行替换)也可能有助于为多字节功能设置永久编码。