对于PHP开发人员来说什么更好 - Unicode或UTF-8?PHP开发者有什么更好的选择 - Unicode还是UTF-8?
我打算创建一个国际CMS。所以我会在全世界有客户。他们会讲所有可能的语言。
什么编码格式更适合浏览器识别和DB数据存储?
对于PHP开发人员来说什么更好 - Unicode或UTF-8?PHP开发者有什么更好的选择 - Unicode还是UTF-8?
我打算创建一个国际CMS。所以我会在全世界有客户。他们会讲所有可能的语言。
什么编码格式更适合浏览器识别和DB数据存储?
“Unicode”不是编码。你可能意思是UTF-8与UTF-16(big-endian或little-endian)。对浏览器的支持真的没什么关系。任何现代浏览器都将支持这三种。您可能会发现UTF-8是数据库中空间效率最高的。
UTF-8 是的Unicode编码。你可能意味着你想选择UTF-8和UTF-16。
开发人员应使用UTF-8,它们之间发送和 从浏览器接收所有 Unicode数据。
对于数据库存储,使用RDBMS更好支持的编码。或者,在其他条件相同的情况下,根据空间效率进行选择。对于英语和大多数欧洲语言而言,UTF-8较小,而对于亚洲语言而言,UTF-16往往较小。
UTF-8是Unicode的一种编码,它是将Unicode字符(抽象)序列表示为(具体)字节序列的一种方式。还有其他的编码,如UTF-16(它既有大端的也有小端的变体)。 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支持,但是这还不可用。)
这是更好地使用UTF-8,因为它是指全世界所有语言的口音。 UTF-8也有扩展的规定,可以添加更多未使用或已识别的字符。我更喜欢并始终使用UTF-8及其系列。
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相关的功能,如htmlspecialchars
能直接用于UTF-8表示,所以你不太可能留下与编码相关的安全漏洞。另外,很多PHP函数都明确地期望UTF-8字符串,并且UTF-8也比UTF-16更好地支持文本编辑器。
实际上,在Unicode术语中,Unicode是一种编码,UTF-8和UTF-16是“转换格式”。最好意识到,与Unicode特定情况相比,“常规”编码在常见情况下的使用方式不同。 – hippietrail 2011-02-17 10:13:42
@hippie,它看起来不像[Unicode词汇表](http://unicode.org/glossary/)单独定义术语“编码”。但是,我同意有不同的用途。 – 2011-02-17 22:19:40
有关术语的更多详细信息,请参阅http://stackoverflow.com/questions/643694/utf-8-vs-unicode。 – 2011-08-23 19:12:53