西里尔字符串的长度PHP加倍它的价值(Php length of cyrillic string d

2019-08-16 21:55发布

你好这里的问题是:当我到达strilen的$ _ POST拉丁字符串()完美的作品,但是当我西里尔字符串的strlen()这里双打它的值是代码:

$word = $_POST['word'];
echo strlen($word) . '<br>'; //input: abc -> returns 3, input: абв -> returns 6 
var_dump($word); //input: abc -> returns string 'abc' (length=3), input: абв -> returns string 'абв' (length=6)

你有什么想法?

Answer 1:

strlen不加倍什么,它只是报告的情况是什么。 具体而言,报告有多少字节 -而不是多少个字符 -组成的字符串。 这是因为strlen没有一个什么样的“性格”是任何知识,盲目地假定1个字节= 1个字符。 因此,我们说,“ strlen是不是多字节感知”。

根据你的情况,似乎浏览器提交UTF-8编码的数据发送到服务器。 在UTF-8,西里尔是每个字符使用两个字节。

如果你想找出字符串中的字符数,使用多字节感知mb_strlen

echo mb_strlen($word, 'UTF-8');


Answer 2:

尝试mb_strlen()如果你要处理的多字节字符。

http://php.net/manual/en/function.mb-strlen.php



Answer 3:

如果你想获得字符(不是字节)的条款长度使用strlen的多字节版本:mb_strlen: http://php.net/manual/en/function.mb-strlen.php



文章来源: Php length of cyrillic string doubles its value