Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该使用多字节重载(mbstring.func_重载)吗?_Php_Unicode - Fatal编程技术网

Php 我应该使用多字节重载(mbstring.func_重载)吗?

Php 我应该使用多字节重载(mbstring.func_重载)吗?,php,unicode,Php,Unicode,我正在让我的PHP站点了解Unicode。我想知道是否有人有过使用mbstring.func_重载设置的经验,该设置使用多字节等价物(mb_strlen)替换普通字符串函数(例如strlen)。PHP手册页面上没有任何注释 我是否应该注意到任何潜在的问题?在任何情况下调用多字节版本都是一个坏主意 我想一个例子是处理加密的函数,因为它们可能希望处理字节字符串,而不是字符字符串 此外,手册页面还包括一条注释:“不建议在每个目录上下文中使用函数重载选项,因为尚未确认它在生产环境中是否足够稳定,并可能导

我正在让我的PHP站点了解Unicode。我想知道是否有人有过使用
mbstring.func_重载
设置的经验,该设置使用多字节等价物(
mb_strlen
)替换普通字符串函数(例如
strlen
)。PHP手册页面上没有任何注释

我是否应该注意到任何潜在的问题?在任何情况下调用多字节版本都是一个坏主意

我想一个例子是处理加密的函数,因为它们可能希望处理字节字符串,而不是字符字符串

此外,手册页面还包括一条注释:“不建议在每个目录上下文中使用函数重载选项,因为尚未确认它在生产环境中是否足够稳定,并可能导致未定义的行为。”


这是否意味着它在每个目录上下文中不稳定,或者通常不稳定?措辞不清楚。

您必须注意的一个问题是使用不支持mb的函数版本的第三方脚本(可能是库或pear扩展)。例如,使用strlen()的库如果过载可能会导致问题

同样,这表明在5.2/5.3 CVS版本中,mb_重载函数的虚拟主机泄漏已得到纠正。这个错误是特定于每个目录配置的。

我的答案是:绝对不是

问题是,一旦str*函数重载,就没有简单的方法“重置”它们

在一段时间内,这可以很好地用于您的项目,但几乎可以肯定的是,您将遇到一个外部库,该库使用字符串函数(例如)来实现二进制协议,它们将失败。他们会失败,你会花几个小时试图找出他们失败的原因

在您发现它是
mbstring.func\u重载之后,您就没有太多的选项了。您可以在每次调用外部库时将
mbstring.internal\u encoding
设置为每字符一个字节的编码,然后立即将其设置回原来的值,但是如果库回调应用程序,它只会把事情搞砸

另一个选项是手动调整库,将所有str*函数更改为对应的mb_字符串,并将每个字符一个字节作为编码参数传递。但是,这也不是一个好主意,因为您失去了轻松更新外部数据的能力,并且可能会导致一些性能问题


因此,再次强调,不要使用
func\u重载
。如果您使用多字节字符串,请使用适当的mb_u函数。

mbstring.func_u重载以一种不好的方式咬了我一口,我想知道我收到的当前未解决的问题中有多少是由此引起的。我编写了一个类来生成ePub文件,并编写了一个伴生类来处理Zip文件。内置Zip函数没有用是有一些原因的。我花了整个周末的时间去寻找,直到报告错误的人提到他们已经将服务器设置为使用utf-8。我甚至不知道mbstring.func_重载的存在,现在我遇到了麻烦,因为将mbstring设置为使用ascii也是不可能的,因为我还将UTF-8与mb_函数一起使用。