我有一个wordpress网站。
我创建了简单的页面模板,如:
<?php
/**
* Template Name: Test
*/
echo strlen('Привет');
?>
然后我使用这个模板创建了一个页面。该页面显示俄语字符串'Привет'的长度(表示'Hello')。我希望看到12,因为由6个字符组成的UTF-8编码俄语字符串应该有12个字节的大小,但我得到6。
我在其他服务器上测试了相同的东西并且具有正确的值 - 12.所以我认为原因是我的服务器配置。我有wp 3.2.1(升级到wp 3.5.1后我有同样的问题)和PHP 5.3.3。
目前我花了大约5天试图找到解决方案,但没有运气。有谁知道这种行为的原因是什么?
答案 0 :(得分:8)
检查php.ini
中的mbstring.func_overload设置。此选项允许PHP使用mb_strlen()覆盖strlen()函数(对于其他等效项也是如此)。这可以解释您的服务器之间的差异
修改强>
从文档链接引用:
要使用函数重载,请将php.ini中的mbstring.func_overload设置为 一个正值,表示指定的位掩码组合 要重载的函数类别。它应该设置为1到 重载mail()函数。 2表示字符串功能,4表示常规功能 表达功能。例如,如果设置为7,则为mail,strings 正则表达式函数将被重载。
因此设置2 bit
的值意味着基本字符串函数将使用其mbstring等效函数重载,但不会重载邮件或正则表达式函数;如果你想要normal
行为,那应该是0
答案 1 :(得分:2)
您是否尝试过:http://lt.php.net/manual/en/function.mb-strlen.php?
int mb_strlen ( string $str [, string $encoding ] )
Gets the length of a string.
答案 2 :(得分:0)
您是否需要使用多字节字符串函数?例如http://www.php.net/manual/en/function.mb-strlen.php
答案 3 :(得分:0)
有关以多字节字符获取字符串长度的详细信息,请参阅http://php.net/manual/en/function.mb-strlen.php。
答案 4 :(得分:0)
我的文件被设置为“UCS-2 BE BOM”编码。 (可以从notepad++-Encoding菜单选项查看)
然后我使用了 mb_strlen($line,"UCS-2") 函数但是由于某种原因,我得到了不正确的字符串长度(例如 mb_strlen("somestr","UCS-2") -> 6,在那里我期待 7)
我已将文件的编码更改为“UTF-8”,并且能够获得正确的字符串长度。
我不确定为什么我使用其他编码类型得到不正确的字符串长度,但想分享对我有用的方法。