以UTF-8保存我的所有源代码文件有什么缺点吗?

jul*_*n_c 1 php utf-8 file-encodings

如果这是相关的(很可能),它们是PHP源代码文件.

zne*_*eak 7

有一些陷阱需要照顾:

  1. PHP不知道特定编辑器或IDE喜欢在UTF-8文件的最开头放置的BOM字符.此字符表示文件是UTF-8,但不是必需的,并且它是不可见的.这会导致处理HTTP标头的函数出现"已发出标头"警告,因为如果PHP看到它,PHP会将BOM输出到浏览器,这将阻止您发送任何标头.确保您的文本编辑器具有UTF-8(无BOM)编码; 如果您不确定,只需进行测试即可.如果<?php header('Content-Type: text/html') ?>在其他空文件的开头没有触发警告,你就没事了.
  2. 默认字符串函数不是多字节编码感知.这意味着strlen实际上返回字符串中的字节数,而不是实际的字符数.在你开始使用以下函数拼接非ASCII字符串之前,这不是太大的问题substr:当你这样做时,传递给它的索引引用字节索引而不是字符索引,这可能导致你的脚本破坏非-ASCII中的两个字符.例如,echo substr("é", 0, 1)将返回无效的UTF-8字符,因为在UTF-8中,é实际上需要两个字节,而substr将只返回第一个字节.(解决方案是使用mb_字符串函数,它们知道多字节编码.)
  3. 您必须确保您的数据源(如外部文本文件或数据库)也返回UTF-8字符串,因为PHP不会进行自动转换.为此,您可以使用特定于实现的方法(例如,MySQL有一个特殊的查询,允许您指定您期望结果的编码:SET CHARACTER SET UTF8或沿着这些行的某些内容),或者如果您找不到更好的方法,mb_convert_encoding或者iconv将一个字符串转换为另一个字符串.