我想写一篇技术方面的文章,但我不知道如何描述这个古怪的问题,虽然我知道如何解决这个问题。我开始乱写了,我连标题都不知道用什么才好。
我遇的到古怪问题在很早以前就遇到了,我在使用某些插件和模板的时候会导致使用“UTF-8”网页编码的BLOG的最上方多出一块空格来,在FIREFOX下能看到那个空格,但在IE下看不到那个空格,这是一件很奇怪的事。后来我发现,只要我把某些被 include 的模板网页或代码是存为“UTF8”就会出现那个讨厌的空格,我把那些被网页用windows的记事存存为”ANSI”就可以让这件怪事消失。但是,这会带来一个更严重的问题:那个存为ANSI编码的网页中的中文汉字会变成不可识别的乱码。用UTF8编码就不会有乱码出现,但会有那个讨厌的空格。
怎么办?
有办法,就是想法把汉字转换为任何网页下编码下都能显示的“html实体”(十进制表示的Unicode编码),实体体似乎还有突破GFW的封锁的作用。
我的两个案例:
一、昨天wxchao提醒我:
IE7无法订阅你的日志.
文本内容中发现无效字符。处理资源 ‘https://www.zuola.com/weblog/feedrss2.asp’ 时出错。第 113 行,位置: 229
我特意安装上IE7看了一下我的Feed,原来是我用到了一个存为ANSI编码的audio-player.php插件,导致FEED输出内容中出现了本来应该是中文的乱码,被IE7认为是不可识别的字符而认为Feed出错。我把这个插件的代码用记事本另存为UTF8编码后再到这个网站上转换一下就成了ANSI编码的文件,并且代码中的所有中文都转换成定义这样的网页实体了。这样一来,IE7就正确识别我的Feed了。附:相关技术说明在andot的《在任意字符集下正常显示中文网页的方法》和《在任意字符集下正常显示网页的方法(续)》,在他的BLOG上,代码转换程序nochaoscode.php也有提供下载,但我用的Dreamhost主机似乎不支持某个函数,在我的网站上运行不了转换代码。
另一个与html实体有关的案例是,我曾在www.fangeming.com网站上放了一些内容,曾自称是反革命中文网,但我担心“反革命”这个字是会被GFW过滤,所以我把网页里的中文全转换成网页实体,似乎从未被GFW过。现在那些文字全在404页面里,任何人通过访问www.fangeming.com 网站里不存在的页面都可以看到那段有深刻思想意义的文字,如果你对那个网页有兴趣,你可以访问那个站的并不存在的页面来查看源代码,记住,那个404页面会在若干秒后跳到首页,查看源代码的动作要快 :-) 。我并不确定网页实体形式的中文不会被GFW识别,不要企图利用此特点,一切后果自负。现在反革命中文网已经改邪归正了,现在的名字叫作“防恶名”,提供广告服务,一元钱一个月的文字广告费,欢迎购买广告,欢迎购买广告后还推荐别人来点击你的文字广告,要记得告诉别人,你在“反革命“网站上打了广告哦。
插播广告:你已经知道好奇心能害死猫了,想知道好奇心能不能害死人么?想知道有哪些人买了“防恶名”的广告么?来“防恶名”“吧。—广告内容结束
刚才被迫装了IE7,顺便检查本站在IE7下的表现,除了首页的最新消息有点乱之外,其它一切都在控制之中。Feed在IE7下也表现正常,并且发现IE7支持hover属性了。看来Web Standard是必然之路,不符合Web Standard的网页肯定会被淘汰。
说到IE7,不得不也说说FireFox2.0,FF2有些不近人情,它居然无视用户在FEED中自定义的XSL文件直接套用他们提供的XSL。我前天抱怨了这个。然后张一宁告诉我有一个办法,就是给FEED前面加一个注释,这个注释要512个字节,然后用FF2来访问我的Feed就会显示出我原来的Feed的样子了。我试着在注释里复制了32遍“Fuck firefox 2.0”后,果然,FireFox不再套用他们的FEED的套套了,显示出我提供的提示访问者用订阅工具订阅Feed的界面了。张一宁还特些写了一篇BLOG解释了这个问题《Firefox 2.0的Feed自定义风格问题及解决办法》。非常感谢张一宁。
边用边学的过程是很好玩的。这两天在玩Ubuntu,我很想把我我学Ubuntu的过程写出来,如果能帮到其它一起学习ubuntu的人,那就算是报答了张一宁这些帮助过我的人了。如果我帮助了的人又去帮助别人,那不就形成良性的循环了吗?开源社区的开源文化就是这样传播的吧。
那个空格是Unicode的BOM.
你可以在保存的时候选择保存为UTF-8 without BOM.
不过,windows的记事本不能这样做。
你可用其他工具,比如notepad++.
纯属巧合,我也刚刚装过Ubuntu。
有空的话,研究一下Python吧。也很好玩。我正在学。最初的动机,只是想把一些论坛里的好内容复制下来,结果它里面加了干扰码,打听了一下,有人建议我用Python处理一下,据说很方便。结果一头就Dive into it了。确实,Python就是能让人越学越起劲。
Feed出错的问题我也遇到过,共同学习
BTW测试一下我的openid
原来是记事本在捣鬼啊。
找到两篇相关文章,
http://yskin.net/2006/07/wordpress-utf-8-bom.html
http://www.aspxuexi.com/css/xhtml/2006-8-3/722.htm
看来确实是UTF-8 文件头的 UTF-8 文件标记搞得鬼
关于Unicode 的 BOM,你可以参见 http://www.unicode.org/glossary/#byte_order_mark。
这是是它的老家。
还是订阅不成,有了新的提示
Internet Explorer 不支持含有 DTD 的源。
可以了
发现停留久点才能识别.
测试新openid
我的博客里面网页html里面汉字都是显示网页实体编码会不会影响搜索引擎收录呢?