2

几年前,我建立了一个很好的自定义 PHP CMS 站点,但我忽略了一个重要问题:unicode 支持。这主要是因为当时的用户都是说英语的,而且在可预见的未来仍然如此。另一个因素是 PHP 一开始就对 unicode 的支持很差。

好吧,现在算账的日子到了。我希望支持 unicode,特别是 UTF8,但我有一个主要障碍:PHP 的字符串函数。如果我错了,请纠正我,但即使是现在,在 PHP 5.5 的世界中,PHP 的常规字符串函数(即 strlen、substr、str_replace、strpos 等)并不完全支持 unicode。另一方面,PHP 的 mb_string 函数确实支持 unicode,但我读到它们可能会占用大量资源(这是有道理的,因为我们将处理多字节字符而不是单字节字符)。

所以,在我看来,有三种解决方案:

1) 在所有情况下都使用多字节字符串函数。

A. 尝试用它们的多字节对应物覆盖标准字符串函数。说到这,如果我这样做,最好的方法是什么?

B. 煞费苦心地检查我的所有代码,并将标准字符串函数替换为对应的多字节函数。

2) 煞费苦心地检查我的所有代码,并将与用户输入、数据库数据等一起使用的标准字符串函数替换为对应的多字节函数。这将要求我仔细查看代码中每个字符串函数的每次用法,以确定它是否有可能处理多字节字符。

这样做的好处是我将拥有最佳的运行时间,同时完全支持 unicode。这里的缺点是,这将非常耗时(而且我可能会补充说非常无聊),并且总是有机会在我应该使用多字节字符串函数的地方错过。

3)彻底检查我的软件并从头开始。但这是我试图避免的事情。

如果有其他可用的选项,请告诉我。

4

1 回答 1

2

我会选择 1.B 的变体:

1.B.2)使用自动“搜索和替换”功能(一个精心设计的sed命令就可以做到)。

1赞成2的理由: 过早的优化是万恶之源。我不知道您在哪里读到 mb_ 函数“资源繁重”,但坦率地说,这完全是胡说八道。当然,它们需要更多的 CPU 周期,但这是您真正不应该担心的一个维度。出于某种原因,PHP 开发人员喜欢讨论诸如“单引号比双引号快”之类的微优化,而他们应该专注于真正产生影响的事情(主要是 I/O 和数据库)。真的,不值得任何努力。

自动化的原因:有可能,它更高效,你需要更多的论据吗?

于 2013-03-22T10:09:03.537 回答