jquery使用json莫名多了好多空格

在使用ajax提交数据到后台处理,处理完成后再返回JSON,根据JSON解析出实际的运行结果。

但在使用过程中,只要后台处理脚本只要一引入某个PHP文件,就会报如下的错误。

SyntaxError: Unexpected token s in JSON at position 6

为了方便查找问题,将ajax后台数据返回格式改为html查看结果时,数据没有问题,只是多了好多空格,

将所有没用的空格删除掉后,问题依旧,但在另一个类似的文件就不存在问题。

经过反复查找问题,原来是文件格式的问题。

原来自己有一次使用记事本打开文件,另存后文件的格式由utf-8变成了utf-8-bom,所以只需要调整文件编码格式即可。

调整方法可用Notepad++菜单栏的编码,选中‘utf-8-bom’即可。

下面引用一段来介绍utf-8和utf-8-bom的区别:

BOM——Byte Order Mark,就是字节序标记

在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。

在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。

由于必须在在Bo-Blog的wiki看到,同样使用PHP的Bo-Blog也一样受到BOM的困扰。其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖cookies和session的功能失效。

所以说记事本默认的UTF-8格式与我们网页开发过程的utf-8是有区别的,虽说都名叫utf-8,其实记事本用的是utf-8-bom格式,而我们在网页开发过程中使用的是utf-8,no bom,no EF BB BF 的开头字节流。

取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!