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

标签 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)

你有什么想法吗?!

最佳答案

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

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

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

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

关于西里尔字符串的 Php 长度使其值加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822669/

相关文章:

java - 测量 double 与 BigDecimal

javascript - 如何在Div加载页面初始化DataTable?

php - 有关 jQuery valid8 的帮助

PHP:使用 mysql_fetch_array 更快地填充数组

ruby-on-rails - 字符串:用 * 号屏蔽最后 n 个字符

python - 查找字符串中第一个数字的索引

javascript将多维数组中的每个元素加倍的方法

c# - 为什么 C# 中的 sin(x) 函数返回 NaN 而不是数字

php - 从 mysql 或 xcode 循环遍历 json

c - 为任意长度的字符串动态分配内存