\u5 ENQ 询问字符,json decode failed (控制字符)

ajax请求json数据遇到不能解析,看了下结果中出现了一个特殊字符红色的点,鼠标移上去提示\u5.
20160601101750
复制结果用notepad++打开,有两个ENQ字符:
20160601102433

尝试用php的json_decode解析一下:

$content =  file_get_contents('i2-circle.txt');
echo $content;
echo "\n";
json_decode($content);
switch (json_last_error()) {
	case JSON_ERROR_NONE:
		echo '没有错误发生';
		break;
	case JSON_ERROR_DEPTH:
		echo '到达了最大堆栈深度';
		break;
	case JSON_ERROR_STATE_MISMATCH:
		echo '无效或异常的 JSON';
		break;
	case JSON_ERROR_CTRL_CHAR:
		echo '控制字符错误,可能是编码不对';
		break;
	case JSON_ERROR_SYNTAX:
		echo '语法错误';
		break;
	case JSON_ERROR_UTF8:
		echo '异常的 UTF-8 字符,也许是因为不正确的编码。';
		break;
	default:
		echo '未知错误';
		break;
}

 
结果是:控制字符错误
20160601101804

在ASCII中常用的控制字符包括
控制字符(Control Character),出现于特定的信息文本中,表示某一控制功能的字符。
在ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。

七位ASCII定义了33个代码作为控制字符,它们是0到31、以及127,(位于0x00-0x1F及0x7F)。
兼容的八位ISO/IEC 8859-1加上了从ISO/IEC 6429定义的从128到159的32个代码,位于0x80-0x9F。

输入json字串前需要移除控制字符:

/**
 * remove control characters (for json)
 * @param $str
 * @return mixed
 */
function strip_control_characters($str){
	return preg_replace('/[\x00-\x1F\x7F-\x9F]/u', '', $str);
}

未经允许不得转载:ganlei的个人博客 » \u5 ENQ 询问字符,json decode failed (控制字符)

赞 (1)
分享到:更多 ()