Answers:
PHP作为一种语言肯定可以拥有它,但是我认为问题在于与现有程序的兼容性。Unicode支持可以通过细微的方式破坏它们,这是最令人讨厌的错误。
当前,PHP中大多数字符串处理功能都是“二进制安全的”,这意味着您可以使用它们来以任何编码以及图像数据等二进制格式来处理任何文件。
添加Unicode字符串后,您必须非常小心,不要将Unicode字符串与二进制字符串混合使用(当您的字符串来自不同的来源并且您之前不必担心它时,会非常困难)。而且您再也不会对编码一无所知了(很多脚本对此一无所知!)
另一个困难但可解决的问题是Unicode字符串中的随机访问。$string[$offset]
从微不足道的变化到非常缓慢的变化或几乎缓慢的变化以及非常复杂的变化的实现。
同样,我认为选择UTF-16作为PHP的内部编码是错误的。它具有与UTF-8相同的问题(由于代理对而导致宽度可变)和UCS-2效率低下的问题。也许他们应该废弃它,然后从UTF-8重新开始?
</speculation>
TLDR:许多PHP库只是不支持unicode或以彼此不兼容的方式支持unicode的本机C库的薄薄一层。纠正这种情况很可能会导致向后不兼容的更改。
免责声明:几年前,我从PHP切换到Python(从不回头),我的观点显然带有偏见。
我认为PHP是一个不错的技巧。作为一种hack,它开始自命不凡,并从一堆稀疏的库中混乱地发展起来,因为它们缺乏良好的思想和统一的设计(从计算机语言理论的角度)。
正如马基雅维利(Machiavelli)所说,“未先奠定基础的人也许能够在事后奠定基础,但会给建筑师带来麻烦,并给建筑物造成危险”。
对于编程语言,它越受欢迎,就越难更改。这就是为什么像C这样的语言每10年更改一次的原因。例如,Python 3进行了许多向后不兼容的更改,这并不漂亮。以前的Python版本中对unicode的支持已经被认为优于PHP当前的状态,但是请猜测:Python 3中最具争议性的变化与unicode处理有关。来自Armin Ronacher的咆哮总结了Python社区的巨大挫败感。
PHP是“无处不在”的Web平台,使其成为自己成功的受害者。在PHP中为unicode统一支持是不可避免的,但是这需要大量的血液,汗水和眼泪。
停止旧的PHP 6工作的主要原因之一是它带来的内部复杂性和要做的工作量,几乎没有人完全理解。
一段历史:PHP 6的Unicode实现是由一个更大的PHP用户的需求设计的,并试图做到“正确”的Unicode。经过一番评估后,PHP要成为Unicode支持的主要设计者选择添加一个内部为Utf-16的新字符串类型,并允许在不同位置使用不同的编码。因此,代码可能用一种编码编写,输出可能使用不同的编码,而“ runtme操作”则使用其他一些编码。选择UTF-16的原因是,该工作应基于使用UTF-16的ICU库,并且发现这种编码可以快速进行通用的字符串操作,而utf-和utf-16之间的转换相对便宜。到目前为止,一切都很好。
现在,这样做的结果是最重要的是引入了新的字符串类型。到目前为止,PHP的内部类型系统具有几种类型(NULL,bool,int / long,float / double,字符串,数组,资源,对象),并且很多代码对此都作了一些假设。除了这些假设之外,所有操作字符串的函数(还有很多)都必须单独评估,并且必须确定如何处理编码。它们应该在二进制字符串还是unicode字符串上工作?如果需要转换,则应使用哪种编码等,这需要大量的工作,并且在某些情况下,做起来很复杂。此外,内部API变得相当复杂,因为PHP中的大多数关键API都有二进制字符串的版本(旧版本),然后通常是“运行时编码”字符串的版本,
在这样做的过程中,许多开发人员迷失了复杂性,被utf-16烦恼,并且不喜欢这样的事实,即这将使内存使用量增加一倍以上,并花费大量时间转换字符串,同时破坏大多数现有应用程序。因此,PHP是由志愿者驱动的,越来越少的开发人员正在使用它,其他事情堆积如山,贡献者对此感到不满,最终不得不放弃它。
现在,未来会带来什么?-发生了缓慢的发展,围绕utf-8构建的PHPae越来越多。自定义类型并不能强行将所有内容强加于人,目前,开发人员没有动力去接触这种热铁。可以希望有人提出一个好的建议以使其正常工作,但是目前“每个人”只要听到这个词就会逃脱。:)
我猜想,实际原因是PHP开发团队缺乏明确的PHP开发路线图(仅当内部人员在不事先同意5.4应该包含什么功能的情况下决定启动PHP 5.4分支时,才进行激烈的讨论)。我非常喜欢这种语言,但是它的开发方式让我有点担心。