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

时间:2010-05-08 01:19:51

标签: php unicode encoding utf-8

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

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

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

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分: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编码的附加函数(查看multibyte string函数),但PHP核心将字符串视为字节而不是字符,因此标​​准PHP字符串函数不适合处理字符编码为多个字节。例如,如果在包含字符“大”的UTF-8表示的字符串上调用PHP的strlen(),它将返回3,因为该字符占用UTF-8中的三个字节,即使它只有一个字符。使用像substr()这样的字符串分割函数是不稳定的,因为如果你在多字节字符的中间分割,你就会破坏字符串。

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

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

答案 2 :(得分:3)

UTF-8 Unicode编码。您可能意味着要在UTF-8和UTF-16之间进行选择。

Microsoft recommends

  

开发人员应该为所有人使用UTF-8   他们发送的Unicode数据和   从浏览器接收。

对于数据库存储,请使用RDBMS更好支持的编码。或者,在其他条件相同的情况下,根据空间效率进行选择。英语和大多数欧洲语言的UTF-8较小,而亚洲语言的UTF-16较小。

答案 3 :(得分:3)

Unicode是一种标准,它定义了一堆抽象字符(所谓的代码点)及其属性(是数字,是大写等)。它还定义了某些编码(用字节表示字符的方法),UTF-8就是其中之一。有关详细信息,请参阅Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

我肯定会使用UTF-8,它是目前无处不在的标准,并且具有一些很好的属性,例如保留所有7位ASCII字符,这意味着大多数与HTML相关的函数,例如{{1可以直接在UTF-8表示上使用,因此您不太可能离开与编码相关的安全漏洞。此外,许多PHP函数明确地期望UTF-8字符串,并且UTF-8也比UTF-16等替代品具有更好的文本编辑器支持。

答案 4 :(得分:0)

最好使用UTF-8,因为它引用了全世界所有语言的口音。此外,UTF-8还有一个扩展条款,即添加更多未使用或已识别的字符。我更喜欢并且总是使用UTF-8及其系列。