php中隐形字符65279(utf-8的BOM头)问题

php中隐形字符65279(utf-8的BOM头)问题

今天遇到一个问题. php输出JSON 前端在解析时发生问题:parsererror.

 

调试:

1.仔细对比字符串发现字符串拼写正确.怀疑是 非打印字符的问题.

2.逐一将字符串还原为unicode编码. 发现在字符串头的位置出现了一个 65279的非打印字符.

 

       资料 :unicode(65279) :叫“ZERO WIDTH NO-BREAK SPACE”即没有宽度的空格符,本质上也是null值,但是不同于null。byte-order mark(BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。说白了就是位于文本最前面用来标识该unicode编码的文本内容是以UTF-8、UTF-16或UTF-32编码的。通过查询发现windows的记事本程序在打开文本内容后会自动添加BOM.

 

       解决: 网上给出了二种方法,都是重新写文件去除utf-8文件的bom头去掉. 我使用的依靠编辑器 --> 另存,选择“UTF-8 - 无BOM”.

 

       相关: 

        js调试代码:

 

$.getJSON("php/login.php", data).done(function(d) {
	//do
}).fail(function(jqXHR, textStatus, errorThrown) {
	console.log('fail',textStatus,errorThrown);
	var ss = jqXHR.responseText;
	for(var f1 in ss){
	  console.log(f1,ss[f1],ss[f1].charCodeAt());
	}
});

 

 

 

 

你可能感兴趣的:(php中隐形字符65279(utf-8的BOM头)问题)