西里尔字符串的Php长度使其值增加一倍

fre*_*2ak 2 php string double strlen

你好,这是问题:当我到达$ _POST拉丁字符串strilen()完美的工作,但当我得到西里尔字符串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)
Run Code Online (Sandbox Code Playgroud)

你有什么想法吗?!

Jon*_*Jon 10

strlen不会加倍,它只是报告情况.具体来说,它报告字符串组成的字节数 - 而不是多少字符数.那是因为strlen不知道"字符"是什么,并且盲目地假定1字节= 1个字符.因此我们说" strlen不是多字节意识".

在您的情况下,似乎浏览器将UTF-8编码数据提交给服务器.在UTF-8中,西里尔文是每个字符两个字节.

如果要查找字符串中的字符数,请使用多字节识别mb_strlen:

echo mb_strlen($word, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)