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

时间:2011-04-05 13:50:27

标签: php utf-8 file-encodings

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

4 个答案:

答案 0 :(得分:7)

有一些陷阱需要处理:

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

答案 1 :(得分:1)

实际上,通常建议您将所有来源保留为UTF8。具有拉丁字符的常规代码的大小无关紧要,但可以防止任何特殊字符出现故障。

答案 2 :(得分:0)

如果您在例如字符串值中使用任何特殊字符,则大小会稍微大一些,但这无关紧要。

然而我的建议是,始终保留默认格式。我花了这么多时间,因为格式化保存错误,所有字符都改变了。

从技术角度来看,没有区别!

答案 3 :(得分:-1)

非常相关,PHP解析器可能会开始输出虚假字符,就像一个时髦的无标记问号。坚持常态,更受欢迎。