|
|
1
45
当PHP在几年前启动时,UTF-8并没有得到真正的支持。我们谈论的是一个非Unicode操作系统(如Windows 98/Me)仍然流行的时代,以及其他大型语言(如Delphi)也是非Unicode的时代。并不是所有的语言从第一天起就考虑到了Unicode,在不破坏很多东西的情况下完全将语言更改为Unicode是很困难的。例如,Delphi在一两年前才与Unicode兼容,而Java或C#等其他语言从第一天起就采用Unicode设计。
编辑:好的,我把问题看错了。问题是:字符串如何在内部存储?如果我输入“W·hrung”或“criture”,使用哪种编码来创建所使用的字节?对于PHP,它是带有代码页的ASCII码。这意味着:如果我用ISO-8859-15编码字符串,你用一些中文代码页解码,你会得到奇怪的结果。另一种选择是在C#或Java等语言中,所有内容都存储为Unicode,这意味着:不再有代码页,理论上你不能搞砸。我推荐 Joel's article 关于Unicode和字符集,但本质上可以归结为:字符串如何在内部存储,PHP的答案是“不使用Unicode”,这意味着您在处理字符串时必须非常小心和明确,以确保在输入、存储(数据库)和输出期间始终以正确的编码保存字符串,这很容易出错。 |
|
|
2
37
我认为这主要是一个文化上的困难,而不是技术上的困难。 至于技术问题——在一个基于“一个字符等于一个字节”假设的生态系统中实现unicode并不是一件小事——开发人员本可以复制java或python的大部分成果(后者自2001年左右以来就具备了相当好的和基本上正常工作的unicode兼容性),但他们从来没有这样做过。
首先,调用该函数
大多数评论者似乎认为unicode是一种负担。有许多建议如何转换“未知内容”字符串,如何处理s“混合编码字符串”(wtf?),或处理通常会导致中断的代码点,因为它们超出了该函数的每个代码点四个字节的限制。 讨论集中在修复上,以消除扭曲或避免该函数行为中有问题的部分。对我来说,这就是sooophp:每个人都在做修复,很少有事情是以基本正确的方式实现的。如果你认为这是对我的诽谤,以下是一些花絮:
(好的方面:php开发人员忽略了现有技术;相反,他们自己的实现有缺陷)
(如前所述) by another commenter ,这是行不通的:
(你永远不能指望官方的php文档是清晰的或详尽的——你必须阅读多年的用户经验,没有人会反馈给文档)
看到这条特定的线索活跃了八年,并不完全能让人相信八年后情况会有所好转。 |
|
|
3
12
“多字节字符”的概念是问题的核心。
|
|
|
4
5
还有一些 extremely popular encodings 由PHP支持,可能是因为不可能这样做并保持向下兼容。 |
|
|
5
3
|
|
|
6
3
许多字符串函数只是C库等价物的精简包装,它也将所有内容都视为字节序列。另一个原因是PHP带来了很多不必要的向后兼容性负担,因此被3&4. 也许有了5.3的名称空间,他们终于可以逐步淘汰旧功能了。 |
|
|
Boltu · pandas从url返回的值是什么? 2 年前 |
|
|
trystine · 试图运行CausalNex错误UnicodeEncodeError:“charmap”编解码器无法对位置263607-263621中的字符进行编码:字符映射到<undefined> 2 年前 |
|
|
Danny Coleiro · 向文本字符串添加不可见字符 2 年前 |