Php 变音符号和mb_substr的问题

Php 变音符号和mb_substr的问题,php,unicode,substr,multibyte,Php,Unicode,Substr,Multibyte,我正在使用mb_substr函数对unicode字符串进行带变音符号的切片,但它的工作原理与我使用简单的substr函数的工作原理相同。它将unicode字符一分为二,显示带问号的菱形 例如 可能有什么问题?如果我没有将编码指定为最后一个参数,我也会遇到同样的问题:至少在我的服务器上,它默认为ISO-8859-1 但是,如果我正确地将编码设置为UTF-8,它就可以正常工作: echo mb_substr('ááááá', 0, 5, 'UTF-8'); 获取浏览器中的正确显示: ááááá

我正在使用
mb_substr
函数对unicode字符串进行带变音符号的切片,但它的工作原理与我使用简单的
substr
函数的工作原理相同。它将unicode字符一分为二,显示带问号的菱形

例如


可能有什么问题?

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


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

echo mb_substr('ááááá', 0, 5, 'UTF-8');
获取浏览器中的正确显示:

ááááá

见(引用,强调我的):

编码
参数为 字符编码如果是 省略,内部字符 将使用编码值


我也有同样的问题,上面的答案也帮了我。除了设置
php.ini
或使用之外,还可以使用
mb_internal_编码('utf-8')
utf-8
可以根据您的选择替换)用于设置多字节函数的永久编码。

内部字符编码可以在php.ini中更改(如果无法在系统范围内更改,甚至可以通过ini_set()进行更改)。我认为这是一个更明智的选择(并且会射杀那个些为专用多字节函数选择单字节默认编码的白痴)。
ááááá
string mb_substr  ( string $str  , int $start  [, 
    int $length  [, string $encoding  ]] )