对PHP开发人员有什么好处 - Unicode或UTF-8?

Rel*_*lla 6 php unicode encoding utf-8

对PHP开发人员有什么好处 - Unicode或UTF-8?

我打算创建一个国际CMS.所以我将在世界各地拥有客户.他们会讲所有可能的语言.

什么编码格式更适合浏览器识别和DB数据存储?

Mat*_*hen 11

"Unicode"不是编码.你可能意味着UTF-8与UTF-16(big-endian或little-endian).对于浏览器支持来说,这无关紧要.任何现代浏览器都将支持这三种.您可能会发现UTF-8对您的数据库来说是最节省空间的.


Wyz*_*a-- 6

UTF-8是Unicode的编码,一种将(抽象)Unicode字符序列表示为(具体)字节序列的方法.还有其他编码,例如UTF-16(具有big-endian和little-endian变体).UTF-8和UTF-16都可以表示Unicode中的任何字符,因此无论您选择哪种语言,都可以支持所有语言.

如果你的大多数文本是西方语言,UTF-8很有用,因为它只用一个字节表示ASCII字符,但是对于"外来"字母表中的许多字符,例如中文,它需要三个字节.另一方面,UTF-16对你可能遇到的所有字符使用恰好两个字节(尽管一些非常深奥的字符,那些在Unicode的"基本多语言平面"之外的字符,需要四个).

但是,我不建议使用PHP来开发国际软件,因为它并不能真正支持Unicode.它有一些用于处理Unicode编码的附加功能(查看多字节字符串函数),但PHP内核将字符串视为字节而不是字符,因此标​​准PHP字符串函数不适合处理编码的字符超过一个字节.例如,如果strlen()在包含字符"大"的UTF-8表示的字符串上调用PHP ,则它将返回3,因为该字符在UTF-8中占用三个字节,即使它只有一个字符.使用字符串分割函数substr()是不稳定的,因为如果在多字节字符的中间分割,则会破坏字符串.

用于Web开发的大多数其他语言(例如Java,C#和Python)都内置了对Unicode的支持,因此您可以将任意Unicode字符放入字符串中,而无需担心使用哪种编码来表示它们.内存,因为从您的角度来看,字符串包含字符,而不是字节.这是一种使用Unicode文本更加安全,不易出错的方法.由于这个原因和其他原因(PHP不是那么好的语言),我建议使用别的东西.

(我已经读过PHP 6将具有适当的Unicode支持,但是现在还没有.)

  • 足够,是的,但不是IMO的最佳选择. (2认同)