在UTF-8中保存所有源代码文件是否有任何缺点


Is there any downside to save all my source code files in UTF-8?

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

有几个陷阱需要注意:

  1. PHP不知道某些编辑器或ide喜欢放在UTF-8文件开头的BOM字符。该字符表示文件是UTF-8格式,但不是必需的,并且不可见。这可能导致处理HTTP报头的函数发出"报头已经发送出去"的警告,因为PHP如果看到BOM就会将其输出到浏览器,这将阻止您发送任何报头。确保你的文本编辑器有一个UTF-8 (No 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_encodingiconv将一个字符串转换为另一个编码。

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

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

尽管如此,我的建议是,始终保留默认格式。我花了这么多时间,因为格式保存错误,所有字符都更改了。

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

非常相关,PHP解析器可能会开始输出虚假字符,比如一个古怪的反问号。只要遵循规范,这是最好的选择。