欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求分析这个神奇的字符是什么?

程序员文章站 2022-05-31 08:29:01
...
我写php时,先输出一段html再include()一个文件(内无输出),再继续输出一段html,那么在最终输出的html内include部分会出现一个奇怪的东西,从而导致网页异常。经我分析,是不知怎么出现了这个一个字符,求分析这是什么字符。
求分析这个神奇的字符是什么?
文件下载链接神奇字符(用notepad++打开能看到).txt 用记事本打开是看不到那个字符的,用notepad++就能看到。

回复内容:

1,hex编辑器
打开为EF BB BF EF BB BF
2,打开google一搜就知道了.
  1. 该内容为UTF-8的BOM,也就是表明本文件采用的字节顺序是什么.多字节编码需要说明自己的顺序,来防止歧义.BOM就是这个作用.不过,UTF-8其实是不需要字节顺序说明的.(具体参考UTF-8编码).所有UTF-8的BOM其实是可有可无的.有也符合标准,没有也可以解析出来.不过这也就导致了各种分歧.
  2. 如果其他编辑器,错误的认为是其他编码格式,那么也可以强制解析出来,出来的就是各种乱码.
3,结合你的问题,就很简单了,这个是PHP的输出,总是带BOM的缘故.
php我没有用过,不过也有讨论如何去掉BOM输出.自己看下吧.
api - How to remove %EF%BB%BF in PHP string
----
这个问题,已经有比较靠谱的回答了.
我就是顺手下载下来了,既然看了,也就是写下来吧.
----
神奇是个非常讨厌的字眼,
它说明你不会分析问题,对待问题根本就不知道怎么着手处理.更不能顺藤摸瓜定位问题,何用妄谈解决问题呢.
(以上不是说提问人,只是结合自己身边的事情感慨一把)
放弃神奇这种字眼吧,碰到问题也不要没头苍蝇式的瞎碰.或者随便改来改去,梦想程序突然就神奇的正常了.要学会定位问题,分析问题,解决问题. BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行 如果文件不多,或者只是新建文件导致的原因,重新保存一次,保存的时候选择UTF-8 no BOM,或者不是UTF-8 with BOM的那个,有些编辑器是在“设置”里面设置保存是否带BOM头。 UTF-8 我下了你这个文件,打开( OS X, textmate 2 )看到的是

Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF)

我搜索了一下,在维基上看到了这个
UTF-16的編碼模式
UTF-16的大尾序和小尾序儲存形式都在用。一般來說,以Macintosh製作或儲存的文字使用大尾序格式,以Microsoft或Linux製作或儲存的文字使用小尾序格式。
為了弄清楚UTF-16文件的大小尾序,在UTF-16文件的開首,都會放置一個U+FEFF字符作為Byte Order Mark(UTF-16LE以FF FE代表,UTF-16BE以FE FF代表),以顯示這個文字檔案是以UTF-16編碼,其中U+FEFF字符在UNICODE中代表的意義是ZERO WIDTH NO-BREAK SPACE,顧名思義,它是個沒有寬度也沒有斷字的空白。

总之,剩下的你自己搜索吧。