一尘不染

什么因素使PHP Unicode不兼容?

php

我可以在脚本中使用UTF-8字符。

实际上,可以使用变量名称,而函数包含Unicode字符

还有mb_string扩展名,用于处理多字节字符串,但是在无数文章中,PHP因缺乏Unicode支持而受到批评。

我不明白 为什么说PHP不支持Unicode?


阅读 273

收藏
2020-05-29

共1个答案

一尘不染

几年前启动PHP时,并没有真正支持UTF-8。我们谈论的是Windows 98 /
Me之类的非Unicode操作系统仍然是当前的时代,而Delphi之类的其他主要语言也是非Unicode的时代。从第一天开始,并不是所有语言都考虑了Unicode的设计,并且很难将语言完全更改为Unicode而又不花很多精力。例如,Delphi仅在一两年前才成为Unicode兼容,而其他语言(如Java或C#)从第一天开始就以Unicode设计。

因此,当PHP成长并成为PHP 3,PHP 4和现在的PHP 5时,没有人决定添加Unicode。为什么?大概是为了与现有脚本兼容,或者因为utf8_de
/
encode和mb_string已经存在并且可以工作。我不确定,但我坚信这与有机增长有关。默认情况下,功能并不简单存在,它们必须由某人编写,而PHP尚未实现。

编辑:好的,我看错了这个问题。问题是:如何在内部存储字符串?如果我键入“Währung”或“Écriture”,则使用哪种编码来创建使用的字节?如果是PHP,则为带有代码页的ASCII。这意味着:如果我使用ISO-8859-15对字符串进行编码,然后使用一些中文代码页对其进行解码,则会得到奇怪的结果。另一种选择是使用C#或Java之类的语言,其中所有内容都存储为Unicode,这意味着:不再有代码页,并且理论上您不会搞砸。我推荐乔尔的文章关于Unicode和字符集,但从本质上讲可以归结为:字符串如何在内部存储,而PHP的答案是“
Not in Unicode”,这意味着在处理字符串时必须非常小心和明确,以确保始终在输入,存储(数据库)和输出期间将字符串保持正确的编码,这很容易出错。

2020-05-29