关于PHP开发人员的优点:PHP开发人员有哪些更好的选择 – Unicode或UTF-8?

What is better for PHP developers - Unicode or UTF-8?

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

我要创建一个国际CMS。所以我要在全世界都有客户。他们会说所有可能的语言。

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


"unicode"不是编码。您可能是指utf-8与utf-16(big-endian或little-endian)。对浏览器的支持真的不重要。任何现代浏览器都支持这三种浏览器。您可能会发现UTF-8对于您的数据库来说是最节省空间的。


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字符串函数不适合处理编码为多个字节的字符。例如,如果在包含字符"大"的utf-8表示形式的字符串上调用php的strlen(),它将返回3,因为该字符在utf-8中占用三个字节,即使只有一个字符。使用像substr()这样的字符串拆分函数是不安全的,因为如果在多字节字符中间拆分,则会损坏字符串。

用于Web开发的大多数其他语言(如Java、Cype和Python)都具有对Unicode的内置支持,以便可以将任意Unicode字符放入字符串中,而不必担心使用哪种编码来表示它们,因为从您的观点来看,字符串包含字符,而不是字节。这是一种更安全、不易出错的处理Unicode文本的方法。出于这个和其他原因(PHP并不是一种很好的语言),我建议您使用其他语言。

(我已经读到php 6将有适当的unicode支持,但这还不可用。)


Unicode是一种标准,它定义了一组抽象字符(所谓的代码点)及其属性(是数字,是大写字母等)。它还定义了某些编码(用字节表示字符的方法),其中包括UTF-8。请看绝对最小值,每个软件开发人员绝对,绝对必须了解Unicode和字符集(没有借口!)斯波斯基,了解更多细节。

我当然会使用utf-8,这是目前所有地方的标准,它有一些很好的属性,例如保留所有7位ASCII字符,这意味着大多数与HTML相关的函数(如htmlspecialchars可以直接在utf-8表示上使用,因此您不太可能留下与编码相关的安全漏洞。此外,许多PHP函数都明确地期望使用UTF-8字符串,而且UTF-8比其他的(如UTF-16)更支持文本编辑器。


UTF-8是Unicode编码。您可能是想在utf-8和utf-16之间进行选择。

微软建议

Developers should use UTF-8 for all
Unicode data that they send to and
receive from the browser.

对于数据库存储,使用RDBMS更好支持的编码。或者,其他条件都一样,根据空间效率进行选择。英语和大多数欧洲语言的utf-8更小,而亚洲语言的utf-16则更小。


最好使用utf-8,因为它指的是世界各地所有语言的重音。此外,UTF-8还有一个扩展条款,可以添加更多未使用或可识别的字符。我喜欢并总是使用UTF-8及其系列。