更新PHP CMS站点以完全支持unicode / utf8

时间:2013-03-22 06:22:30

标签: php unicode utf-8 updating multibyte

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

嗯,现在清算的日子来了。我希望有支持unicode,特别是UTF8,但我有一个主要障碍:PHP的字符串函数。如果我错了,请纠正我,但即使是现在,在PHP 5.5的世界中,PHP的常规字符串函数(即strlen,substr,str_replace,strpos等)并不完全支持unicode。另一方面,PHP的mb_string函数确实支持unicode,但我已经读过它们可能相当重要(这是有意义的,因为我们将处理多字节字符而不是单字节字符)。

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

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

一个。尝试使用多字节对应项覆盖标准字符串函数。说到这一点,我是这样做的,最好的方法是什么?

B中。煞费苦心地遍历我的所有代码并用多字节函数替换标准字符串函数。

2)仔细检查我的所有代码,并用他们的多字节功能对应物替换可用于用户输入,数据库数据等的标准字符串函数。这需要我在代码中仔细查看每个字符串函数的每个用法,以确定它是否有最轻微的机会处理多字节字符。

这样做的好处是我可以拥有最佳的运行时间,同时完全支持unicode。这里的缺点是,这将是非常耗时(并且非常无聊,我可能会添加)来实现,并且总是有可能我错过了使用多字节字符串函数的地方。

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

如果还有其他选择,请告知我们。

1 个答案:

答案 0 :(得分:2)

我会选择1.B的变体:

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

1支持2的原因: premature optimization is the root of all evil。我不知道你在哪里读到mb_功能是“资源沉重”,但说清楚它完全是胡说八道。当然,他们需要更多的CPU周期,但这是一个你真正不应该担心的维度。出于某种原因,PHP开发人员喜欢讨论像“单引号比双引号更快”这样的微优化,而他们应该专注于真正有所作为的事情(主要是I / O和数据库)。真的,这不值得任何努力。

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