use*_*710 8 php persian strlen multibyte
我有这个代码:
$string = '???';
echo strlen($string);
Run Code Online (Sandbox Code Playgroud)
由于$string有3个波斯字符,输出必须是3但我得到6.
???有3个字符.为什么我的输出是6?
如何strlen()在php中使用具有实际输出的波斯语?
Han*_*nky 16
返回字符串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版本启用扩展,你可能已经决定不尝试启用它:)虽然对于未来的读者来说,它并不困难,如果你启用它是明智的正在处理多字节字符,因为它不仅是您可能需要处理的长度.见手册
试试这个:
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版本.
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |