Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新PHP CMS站点以完全支持unicode/utf8_Php_Unicode_Utf 8_Updating_Multibyte - Fatal编程技术网

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

更新PHP CMS站点以完全支持unicode/utf8,php,unicode,utf-8,updating,multibyte,Php,Unicode,Utf 8,Updating,Multibyte,几年前,我建立了一个很好的定制PHPCMS站点,但我忽略了一个重要问题:unicode支持。这主要是因为当时的用户是说英语的,在可预见的未来,情况仍然如此。另一个因素是PHP对unicode的支持很差 好吧,现在清算的日子到了。我希望支持unicode,特别是UTF8,但我有一个主要障碍:PHP的字符串函数。如果我错了,请纠正我,但即使是现在,在PHP5.5的世界中,PHP的常规字符串函数(即strlen、substr、stru_replace、strpos等)也不完全支持unicode。另一方

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

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

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

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

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

B.仔细检查我的所有代码,并用多字节函数替换标准字符串函数

2) 仔细阅读我的所有代码,用多字节函数替换标准字符串函数,这些函数可以处理用户输入、数据库数据等。这需要我仔细查看代码中每个字符串函数的每次使用情况,以确定它是否有处理多字节字符的最小机会

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

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


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

我会选择1.B的变体:

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

1支持2的原因:。我不知道你从哪里读到mb_u函数是“资源密集型”的,但简单地说,这完全是胡说八道。当然,它们需要更多的CPU周期,但这是一个你真的不应该担心的方面。出于某种原因,PHP开发人员喜欢讨论诸如“单引号比双引号快吗”之类的微观优化,而他们应该关注真正起作用的事情(主要是I/O和数据库)。真的,这不值得任何努力


自动化的原因:这是可能的,效率更高,您需要更多参数吗?

那么为什么不简单地重写函数呢?如果可以更容易地覆盖它们,那么将它们全部替换又有什么意义呢?另外,如果我们要使所有字符串函数都是多字节的,那么将所有这些mb_uuu函数放在一起似乎很难看。最好让PHP像专业语言一样“运行”(默认的字符串函数已经处理了多字节字符)。如果你想“简单地”攻击PHP内核并承担所有后果。主要是失去可移植性和可升级性。明确地说,我们正在讨论更改PHP源代码和编译您自己的PHP版本。