IE查看WordPress源代码乱码
惊讶的发现WordPress博客在IE内核的浏览器下查看源代码,中文全显示为乱码。不知道什么时候开始的,以前一直用火狐没有用过IE查看源代码,而且不管什么浏览器网页显示一直都很正常,就没有注意到。
这次因为我修改了头部代码,简单的优化了一下(早该做了)。然后就发现用火狐查看源代码时,程序调用出来的keyword和description的内容都是乱码。于是转用IE查看,就发现更奇怪的事情,除了上面提到的两个meta标签里面的中文内容是正常的外,其他中文内容全部都是乱码…
当时就以为是修改的部分出了错误,于是上传备份的文件恢复。火狐是正常了,但IE却全部中文字包含连刚才正常的都是乱码了。看来和那部分修改无关,难道这个问题在IE下已经存在很久了?
于是马上开Google搜之,发现WordPress有这个问题的博主还不少,有人提到是插件出的问题。我使用的插件很少,逐一禁用检查过一次,结果就是插件并无问题。
最后把WordPress模板里面的所有文件检查了一次后发现原来有一些网页并非UTF-8格式,看来问题就出在这里。把所有非UTF-8格式的文件转换好之后替换,源代码终于都正常了。
这个问题解决了,但又有新问题。网页显示又有问题了,页面顶部多出了一行空白。把头部文件header.php替换回原来的文件就恢复正常了,但头部文件源代码里的中文又是乱码了…
再上Google搜索,原来关键就在UTF-8 BOM。把头部文件保存为不带BOM的UTF-8文件,问题就全部解决了。不同浏览器下源代码显示正常,网页也显示正常了。
这是找到的一段关于UTF-8 BOM和PHP的资料:
UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。
可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。
PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以这三个字符将会直接输出。
如果插件的文件有这个问题,将会导致在后台页面里激活或者不激活插件后显示白屏,如果是模版文件有这个问题,将会导致这三个字符直接输出,造成页面上方有一个小空行。国外的英文插件和模版一般都是用的ASCII码的编码方式,不会有BOM,只有国内的插件和模版会由于作者的不知情造成问题。
还有,大家修改模版的时候,由于输出页面使用UTF-8编码,那么修改模版的时候如果有加入中文字符的话,必须把文件转成UTF-8编码才能正常显示,这个时候如果所使用的编辑器自动加上了BOM的话,将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码。
不过开头提到的,在不正常的情况下修改的那部分,火狐查看中午字体是乱码而IE查看却是正常,到现在还不清楚为什么会这样…
标签: BOM, IE, UTF-8, WordPress, 乱码, 浏览器, 源代码, 网站
