10

strlen()php 中的函数无法正确返回 utf8 字符的字符串长度,例如سلام是 4 个字符,但使用 strlen 后返回 8 个字符

<?php
echo strlen('سلام');
?>
4

2 回答 2

22

核心 PHP 字符串函数都假定 1 个字符 = 1 个字节。他们没有不同编码的概念。要弄清楚UTF-8 字符串中有多少个字符(而不是多少字节),请使用mb_strlen等价的并告诉它字符串的编码是什么:

echo mb_strlen('سلام', 'UTF-8');
于 2012-11-22T08:49:05.927 回答
5

您可以获得二进制 PHP 字符串中 UTF-8 代码点的数量(只要它是有效的 UTF-8 编码)(演示):

$length = preg_match_all('(.)su', $subject);

如果您安装了多字节扩展名,您也可以使用它:

$length = mb_strlen($subject, 'UTF-8');

另请参阅:PHP UTF-8 字符串长度

于 2012-11-22T08:52:45.343 回答