几年前,我构建了一个很好的自定义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)彻底检修我的软件并从头开始。但这是我想避免的事情。
如果还有其他选择,请告知我们。
答案 0 :(得分:2)
我会选择1.B的变体:
1.B.2)使用自动“搜索和替换”功能(一个精心设计的sed
命令可能会这样做。)
1支持2的原因: premature optimization is the root of all evil。我不知道你在哪里读到mb_功能是“资源沉重”,但说清楚它完全是胡说八道。当然,他们需要更多的CPU周期,但这是一个你真正不应该担心的维度。出于某种原因,PHP开发人员喜欢讨论像“单引号比双引号更快”这样的微优化,而他们应该专注于真正有所作为的事情(主要是I / O和数据库)。真的,这不值得任何努力。
自动化的原因:它可能,它更有效,你需要更多的参数吗?