2

我有一个到目前为止只有英文的应用程序。整个模板和数据库的内容编码都是 UTF-8。我现在希望将应用程序国际化/翻译成具有绝对需要 UTF-8 的字符集的语言。

该应用程序使用各种 PHP 字符串函数,例如strlen()strpos()substr()等,我的理解是我应该将这些函数切换为多字节字符串函数,例如mb_strlen()mb_strlen()mb_substr()等,以便正确处理多字节字符。我试图阅读这个主题,但几乎我能找到的所有内容都深入到“编码理论”中,并没有提供一个简单的问题答案:如果我始终使用 UTF-8,我可以从使用strlen()tomb_strlen()并期望事情可以正常工作,例如英语和阿拉伯语,还是我还需要注意什么?

任何见解都将受到欢迎,如果我因我的相对无知而冒犯了一个贴近他们内心的编码的人,我深表歉意。

4

3 回答 3

3

不会。由于 bytearrays 在 PHP 中也是字符串,因此将 8 位字符串函数简单地替换为 mb_* 对应物只会带来麻烦。像 strlen() 和 substr() 这样的函数可能比实际的文本字符串更常用于字节。

在我上次工作的地方,我们设法在完全不使用 mbstring 库的情况下用 PHP 构建了一个多语言网站(阿拉伯语、印地语等)。文本字符串操作实际上并不经常发生。当它发生时,它需要的不仅仅是更改函数名称。我发现,大多数挑战都存在于 HTML 方面。让页面布局与 RTL 语言一起使用是非常重要的部分。

我不知道您是否只是以阿拉伯语为例。国际化的难度可能会有很大差异,具体取决于“国际”是指欧洲语言(加上俄语),还是包括中东、南亚和远东语言。

于 2012-08-20T22:42:47.110 回答
1

检查php.ini中mbstring.func_overload 标志的状态

如果 (ini_get('mbstring.func_overload') & 2) 则 strlen() 之类的函数(如此处所列已被 mb_strlen() 函数重载,因此您无需显式调用 mb_* 函数。

于 2012-08-20T22:15:55.757 回答
1

真正需要的多字节函数的数量在10个以下,所以创建3或5个问题,函数或逻辑的使用是否良好。这个问题是不安全的,很难回答。小问题可以快速得到答案。具体的问题可以带来好的答案。当您提出其他问题时,请告诉我。

如果您需要用例,请参阅 CMS 中的后备功能,例如WordpressMediaWikiDrupal

当您决定开始使用 mbstring 时,您应该避免使用 mbstring.func_overload 指令。Mbstring 维护者将在 PHP 5.5 或 5.6 中弃用 mbstring.func_overload(请参阅 2012 年 4 月的 P HP 核心邮件列表)。mbstring.func_overload 破坏了不应使用 mbstring.func_overload 的代码库。您可以在 CakePHP、Zend Framework 1x 中看到使用strlen()计算Content-Length的案例。

我在另一个地方回答了类似的问题:我应该重构我的所有框架以使用 mbstring 函数吗?

于 2012-12-05T16:38:18.837 回答