PHP:strlen返回字符长度而不是字节长度

Vas*_*liy 7 php wordpress strlen

我有一个wordpress网站.

我创建了简单的页面模板,如:

<?php 
 /**
 * Template Name: Test
 */

 echo strlen('??????');

 ?>
Run Code Online (Sandbox Code Playgroud)

然后我使用这个模板创建了一个页面.该页面显示俄语字符串'Привет'的长度(表示'Hello').我希望看到12,因为由6个字符组成的UTF-8编码俄语字符串应该有12个字节的大小,但我得到6.

我在其他服务器上测试了相同的东西并且具有正确的值 - 12.所以我认为原因是我的服务器配置.我有wp 3.2.1(升级到wp 3.5.1后我有同样的问题)和PHP 5.3.3.

目前我花了大约5天试图找到解决方案,但没有运气.有谁知道这种行为的原因是什么?

Mar*_*ker 8

检查中的mbstring.func_overload设置php.ini.此选项允许PHP使用mb_strlen()覆盖strlen()函数(对于其他等效项也是如此).这可以解释您的服务器之间的差异

编辑

引用文档链接:

要使用函数重载,请将php.ini中的mbstring.func_overload设置为一个正值,该值表示指定要重载的函数类别的位掩码组合.它应设置为1以重载mail()函数.2表示字符串函数,4表示正则表达式函数.例如,如果将其设置为7,则将重载邮件,字符串和正则表达式函数.

因此,使用2 bitset 的值意味着基本字符串函数将使用其mbstring等效函数重载,但不会重载邮件或正则表达式函数; 如果你想要normal行为,这应该是0


ka_*_*lin 3

您是否尝试过: http: //lt.php.net/manual/en/function.mb-strlen.php

int mb_strlen ( string $str [, string $encoding ] )
Gets the length of a string.
Run Code Online (Sandbox Code Playgroud)