昨天写代码,需要在一个模板中引入其他文件并在页面显示,但是显示后的效果却大出意料,多了一个莫名其妙的字符,导致页面换行,极度的丑阿。以前也遇到这个问题,当时是include 一个头文件,是在刚开始,当时使用ob_clean()将缓存删除解决。但是现在这个任务里面是不能删除缓存(引入的页面在中间显示)。没有办法,跑到phpe.net上面寻求帮助(jingdizhiwa就是我)。如下:
作者 | 请教include文件时出现莫名其妙的字符问题 |
jingdizhiwa 正式会员 组别: 普通会员 发贴: 10 积分: 0 |
Posted:2006/03/29 20:22
我现在的环境是windows+appserv2.5.5,因为需要引入写好的模块(html格式),所以要使用include语句 但是莫名其妙的空了一行,导致页面不美观,拷贝源代码放到UltraEdit发现多了一个? 在google中搜索关键字“php include 问题”没有发现解决方法,不知道有没有人遇到这个问题,又是如何解决的。给个链接也行。 hiaha,3xs |
aDang 正式会员 组别: 普通会员 发贴: 131 积分: 1 |
Posted:2006/03/30 09:41
源文件是不是带了BOM的UTF-8格式 aDang @ bbs.freecity.cn since 2001 |
jingdizhiwa 正式会员 组别: 普通会员 发贴: 10 积分: 0 |
Posted:2006/03/30 10:53
问题解决了 首先根据aDang的提示,我怀疑是UltraEdit保存时候出现问题,所以使用Zend Studio查看了引用的文件,果然发现前面多了一个字符,删除之后,问题解决。 然后仔细查看了一下UltreEdit的配置,将选项“保存时对所有UTF-8写入UTF-8文件头标记(BOM)”关闭,重启UltraEdit,发现原来显示正确的文件前面都多了一个莫名字符,16进制为EF BB BF,肯定就是这个问题了。 看来以后使用UltraEdit还要小心配置。 |
问题现在解决了。感谢aDang。另外自己在google上面搜索了有关"BOM utf-8",找到一篇
按標準UTF-8檔案加不加BOM都可以(詳細資料可瀏覽www.unicode.org),因為程式一般都可以依文章內容推算是否UTF-8,不過以UltraEdit為例,有時UTF-8短句是會被錯認為ANSI編碼。加BOM是較保險的做法,而且MS的記事本、IE及Word等當文件儲成UTF-8格式時都是加入BOM的,讓程式開啟時能輕易辨明正確編碼。
UTF-8的BOM是 EFBBBF,因為UltraEdit匯入UTF-8文件後內容會轉做Unicode-LE(所以在Hex模式看到的並非UTF-8文件原本的字碼),上述的EFBBBF當轉成Unicode-LE後便是FFFE(Unicode-LE的BOM),UltraEdit不能辨認這個BOM有理無理自己又加多一個BOM,所以有兩個FFFE出現。
因此,最好的方法就是在UltraEdit內將
Write UTF-8 BOM header to ALL UTF-8 files when saved
設成OFF,就不會在儲存時又在檔案中加入了BOM
UTF-8的BOM是 EFBBBF,因為UltraEdit匯入UTF-8文件後內容會轉做Unicode-LE(所以在Hex模式看到的並非UTF-8文件原本的字碼),上述的EFBBBF當轉成Unicode-LE後便是FFFE(Unicode-LE的BOM),UltraEdit不能辨認這個BOM有理無理自己又加多一個BOM,所以有兩個FFFE出現。
因此,最好的方法就是在UltraEdit內將
Write UTF-8 BOM header to ALL UTF-8 files when saved
設成OFF,就不會在儲存時又在檔案中加入了BOM
还有几篇文章是有关UTF-8编码的,原文太长,下面给出链接和关键字,以备查询
http://fmddlmyy.home4u.china.com/text6.html (key:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词)
http://wiki.mambochina.net/index.php/UTF-8%E5%AD%97%E7%AC%A6%E9%9B%86%E5%9F%BA%E7%A1%80(key:UTF-8 字符集基础)
http://www.codeguru.com/Cpp/misc/misc/multi-lingualsupport/article.php/c10451/(key:The Basics of UTF-8)