Unicode PHP源文件

时间:2011-04-15 23:09:34

标签: php unicode utf-8

对于我正在进行的项目,我需要在某些php文件中添加一些unicode字符。

所以我当然需要使用unicode编码。

这让我想知道:

是什么阻止了我对所有PHP文件使用unicode?

4 个答案:

答案 0 :(得分:5)

没有什么可以阻止你在所有的php文件中使用unicode,只有你这样做时,如果设置的unicode设置干扰了脚本处理,你可能需要编辑你的脚本。

答案 1 :(得分:3)

使用UTF8编码的源文件时需要记住一些事项:

  1. 有些编辑可能会在文件的开头添加BOM - 这可能会损坏脚本输出 - 您应该保存文件而不使用BOM。
  2. strlen和其他字符串函数可能不像您期望的那样工作 - 您应该使用多字节字符串函数作为字符串长度等:http://php.net/manual/en/book.mbstring.php
  3. 正则表达式需要u修饰符才能使用unicode字符。
  4. 使用文件时应该小心 - 注意当前编码,因为当文件不包含BOM(参见#1)时,编辑器可能会以系统默认编码打开它。
  5. 某些源代码工具可能无法正常使用UTF8文件(因为它们不包含BOM,但即使文件中有一些也无法正常工作)。
  6. 根据我的经验,我可以说有时候将字符串存储在资源(文本文件等)中并且不在代码文件中使用UTF8会更好,但有时候它是正常的 - 这取决于你是否遇到问题或不。

答案 2 :(得分:1)

什么是“Unicode编码”?

Unicode是一个字符集; Unicode和字节之间有很多编码,其中许多只映射可能字符的子集。

当你想在PHP脚本中使用非ASCII Unicode字符时,通常最好的编码选择是UTF-8,因为它是ASCII超集编码(即每个字节的低128值总是意味着标准ASCII字符)仍然可以表示任何Unicode字符。与许多其他面向字节的工具一样,PHP只能可靠地使用ASCII超集编码。

如果通过“Unicode编码”表示记事本和其他Windows工具称之为“Unicode”的东西,那就完全不同了。对于正确称为UTF-16LE编码的内容,这是一个误导性的名称。这种编码具有每个代码单位2字节的宽度,这意味着例如普通的ASCII字符在它们之间出现零字节。它不是ASCII超集,因此PHP和其他基于字节的工具无法直接使用它。

在基于Windows的编辑器中保存脚本时,请查看以UTF-8(无BOM)保存,并使用UTF-8 Content-Type字符集为您的页面提供服务。虽然它是Windows,Java和JavaScript的默认内存表示形式,但UTF-16LE在存储文件或提供网页方面几乎没有用。

答案 3 :(得分:1)

  

什么阻止我对所有PHP文件使用Unicode?

特定编码可能。 PHP本身并不专门处理文件输入,而只是作为二进制序列处理。

在源文件级别上与PHP兼容的唯一Unicode编码是UTF-8。

注意不要使用UTF-8-BOM保存php文件。 PHP将其视为标准文本并将其输出,因为它位于开始<?php标记之前:

{UTF8-BOM}<?php

输出是不可见的,但是字节长度为3,导致标头已经发送错误或在DOM内部插入文本节点,而不是那些。