当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我应该使用多字节重载(mbstring.func_overload)吗?》经验,为你挑选了1个好方法。

我正在使我的PHP站点支持Unicode.我想知道是否有人有mbstring.func_overload设置经验,strlen用其多字节等价物(mb_strlen)替换正常的字符串函数(例如).PHP手册页上没有任何评论.

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

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

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

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



1> gphilip..:

我的回答是:绝对不是!

问题是,一旦它们过载,就没有简单的方法来"重置"str*函数.

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

在您发现它之后mbstring.func_overload,您没有太多选择.mbstring.internal_encoding每次调用外部库并将其设置回来之后,你都可以将ini_set设置为一个每字节一个字节的编码,但是如果你的库对你的应用程序进行回调,那么它就会搞乱.

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

所以,再次,不要使用func_overload.如果使用多字节字符串,请使用适当的mb_函数.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有