wordpress汉化过程中碰到Cannot modify header information的问题

今天想把主题的一些内容汉化以下,包括右侧栏Sidebar tabs的提示等。主要是在lib文件夹下的widget.php文件里,于是先把该文件下载下来,然后用记事本打开,把该修改成中文的地方改好,点击文件->另存为,选择编码为utf-8(原来是ANSI)。

本以为这样就好了,没想到一刷新,firebug里出现了warning

Warning: Cannot modify header information - headers already sent by (output started at /home/xxx/public_html/lib/widget.php:1)

问题的来源

从上面的错误信息来看,是 widget.php 文件的第一行出现了问题。实际上是第一行被记事本插入了一个看不见的字符,导致了这个错误。这个字符就是 UTF8 的标志——BOM (Byte Order Mark)字节序标记。

对于 UTF 8 而言,它只有一个字节,显然不必要使用 BOM 来标记字节顺序。但是 BOM 可以用来表明,这是一个 UTF 8 编码的文件。Windows 系统的记事本就喜欢在 UTF 8 文件里面添加一个 BOM 标记。

问题就来了,WordPress 所使用的动态语言,PHP,在设计的时候没有考虑 UTF8 编码的问题。因此如果是 UTF 8 no BOM 的文件,它可以正常识别;但是如果遇到一个 UTF 8 with BOM 的文件,也就无法识别在文件开头的 BOM 标志。

解决方法

找到了问题的所在就好办了,只要把文件另存为utf-8 no BOM就行了,用记事本是不行滴,这里推荐用UltraEdit-32

另存为utf-8 无 bom

2 Responses

  1. hellosnow说道:

    是的 为什么记事本不行呢?我以前也遇到过