2

你好,这是问题所在:当我到达 $_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)

你有什么想法吗?!

4

3 回答 3

14

strlen不会加倍任何东西,它只是报告情况。具体来说,它报告有多少字节——而不是多少字符——组成了字符串。那是因为strlen不知道什么是“字符”,并且盲目地假设 1 字节 = 1 个字符。因此我们说“strlen不是多字节感知的”。

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

如果要找出字符串中的字符数,请使用 multibyte-aware mb_strlen

echo mb_strlen($word, 'UTF-8');
于 2013-02-11T23:11:56.313 回答
4

mb_strlen()如果您正在处理多字节字符,请尝试。

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

于 2013-02-11T23:12:18.207 回答
1

如果您想以字符(而不是字节)的形式获取长度,请使用 strlen 的多字节版本:mb_strlen:http ://php.net/manual/en/function.mb-strlen.php

于 2013-02-11T23:13:33.273 回答