我怎样才能在php中使用strlen for Persian?

use*_*710 8 php persian strlen multibyte

我有这个代码:

$string = '???';
echo strlen($string);
Run Code Online (Sandbox Code Playgroud)

由于$string3个波斯字符,输出必须是3但我得到6.

???有3个字符.为什么我的输出是6

如何strlen()在php中使用具有实际输出的波斯语?

Han*_*nky 16

使用mb_strlen

返回字符串str中具有字符编码(第二个参数)编码的字符数.多字节字符计为1.

由于您的3个字符都是多字节的,strlen因此返回6 ,但这会3按预期返回.

echo mb_strlen($string,'utf-8');
Run Code Online (Sandbox Code Playgroud)

小提琴

注意

重要的是不要低估这种方法和任何类似替代方案的力量.例如,如果字符是多字节然后只是得到长度strlen并且将其除以2,则可能倾向于说好,但是只有当字符串的所有字符都是多字节时.才会有效,甚至一段时间也会使计数无效.例如这个

echo mb_strlen('???.','utf-8');
Run Code Online (Sandbox Code Playgroud)

返回4正确的.所以这个函数不仅取整个长度除以2,每个多字节字符计数1,每个单字节字符计数1.

笔记2:

看起来你决定不使用这种方法,因为mbstring默认情况下没有为旧的PHP版本启用扩展,你可能已经决定不尝试启用它:)虽然对于未来的读者来说,它并不困难,如果你启用它是明智的正在处理多字节字符,因为它不仅是您可能需要处理的长度.见手册


Pow*_*Man 8

试试这个:

function ustrlen($text)
{
    if(function_exists('mb_strlen'))
        return mb_strlen( $text , 'utf-8' );
    return count(preg_split('//u', $text)) - 2;
}
Run Code Online (Sandbox Code Playgroud)

它适用于任何PHP版本.


j12*_*567 5

mb_strlen 功能是你的朋友