Php 我应该重构所有框架以使用mbstring函数吗?

Php 我应该重构所有框架以使用mbstring函数吗?,php,utf-8,multibyte,Php,Utf 8,Multibyte,我目前使用mbstring.func_重载=7来处理UTF-8字符集 我正在考虑重构所有func调用以使用mb_*函数 您认为这是必要的,还是PHP6或更新版本的多字节问题将以另一种方式解决 当然是utf-8的字符串 当然可以。不过,使用字符串可以做很多事情。UTF-8向后兼容ASCII。如果您只想对字符串的ASCII字符进行操作,则可能会产生影响,也可能不会产生影响。这取决于你需要如何处理你的字符串 如果你想得到一个直接的答案:不,你不应该把每个函数都重构成一个mb_u函数,因为这可能会有点过

我目前使用mbstring.func_重载=7来处理UTF-8字符集

我正在考虑重构所有func调用以使用mb_*函数

您认为这是必要的,还是PHP6或更新版本的多字节问题将以另一种方式解决


当然是utf-8的字符串

当然可以。不过,使用字符串可以做很多事情。UTF-8向后兼容ASCII。如果您只想对字符串的ASCII字符进行操作,则可能会产生影响,也可能不会产生影响。这取决于你需要如何处理你的字符串

如果你想得到一个直接的答案:不,你不应该把每个函数都重构成一个mb_u函数,因为这可能会有点过头。您是否应该检查您的用例,看看多字节UTF-8字符串是否会影响结果并相应地重构?对


当然是utf-8的字符串

当然可以。不过,使用字符串可以做很多事情。UTF-8向后兼容ASCII。如果您只想对字符串的ASCII字符进行操作,则可能会产生影响,也可能不会产生影响。这取决于你需要如何处理你的字符串


如果你想得到一个直接的答案:不,你不应该把每个函数都重构成一个mb_u函数,因为这可能会有点过头。您是否应该检查您的用例,看看多字节UTF-8字符串是否会影响结果并相应地重构?是。

如果您正在使用其他人创建的库,则不建议使用。这里有三个原因

重载可以破坏不期望重载的库的行为。 您的框架可以在没有过载的环境中被破坏。 根据重载情况,框架的潜在用户会减少,因为 一个很好的例子。是使用strlen错误计算HTTP内容长度字段中的字节大小。原因是重载的strlen函数不返回字节数,而是返回字符数。您可以在和中看到真实世界的问题

编辑: 从2012年4月起,PHP 5.5或5.6中正在考虑取消mbstring.func_重载。所以现在应该避免mbstring.func_重载

对于各种平台,处理多字节字符的推荐策略是直接使用mbstring、intl或iconv。如果您确实需要回退函数来处理多字节字符,请使用函数_exists

您可以在Wordpress和MediaWiki中看到这些案例

WordPress: MediaWiki: 一些CMSE(如Drupal)引入了多字节抽象层

我认为抽象层不是个好主意。 原因是,在许多情况下,所需的处理多字节函数的数量不到10个,并且如果安装了这些模块,则umultibyte函数易于使用,并降低了将处理切换到mbstring、intl或iconv的性能

处理多字节字符的最低要求是mb_substr和处理无效字节序列。 您可以在上述CMSE中看到mb_substr的回退函数的情况。
我在以下位置回答了有关处理无效字节序列的问题:

如果您使用的是其他人创建的库,则不建议使用。这里有三个原因

重载可以破坏不期望重载的库的行为。 您的框架可以在没有过载的环境中被破坏。 根据重载情况,框架的潜在用户会减少,因为 一个很好的例子。是使用strlen错误计算HTTP内容长度字段中的字节大小。原因是重载的strlen函数不返回字节数,而是返回字符数。您可以在和中看到真实世界的问题

编辑: 从2012年4月起,PHP 5.5或5.6中正在考虑取消mbstring.func_重载。所以现在应该避免mbstring.func_重载

对于各种平台,处理多字节字符的推荐策略是直接使用mbstring、intl或iconv。如果您确实需要回退函数来处理多字节字符,请使用函数_exists

您可以在Wordpress和MediaWiki中看到这些案例

WordPress: MediaWiki: 一些CMSE(如Drupal)引入了多字节抽象层

我认为抽象层不是个好主意。 原因是,在许多情况下,所需的处理多字节函数的数量不到10个,并且如果安装了这些模块,则umultibyte函数易于使用,并降低了将处理切换到mbstring、intl或iconv的性能

处理多字节字符的最低要求是mb_substr和处理无效字节序列。 您可以在上述CMSE中看到mb_substr的回退函数的情况。
我在以下位置回答了有关处理无效字节序列的问题:

这取决于您的操作。如果您正在处理的字符串都是纯ASCII字符,则无所谓。有什么用
你到底想把utf-8的字符串重构成mb?当然,这取决于你做了什么。如果您正在处理的字符串都是纯ASCII字符,则无所谓。对于utf-8的字符串,您认为重构为mb_2;有什么用呢