通过JSON AJAX从PHP到JS传递十六进制的角度括号

时间:2012-03-12 03:47:31

标签: php javascript mysql ajax json

我的系统在PHP中运行一些MySQL查询来检索数据。检索到的数据的结构类似于以下数组:

$ret = array(
    "name" => "John Doe",
    "location" => "Antarctica",
    "description" => "Height < 200"
);

我通过AJAX通过以下方式返回:

echo json_encode($ret);

通过Chrome控制台检查返回的数据(jqXHR.responseText)时会触发AJAX错误事件,我注意到:

"description" : "Height \x3c 200"

抛出一个解析错误。

我知道\ x3c是“&lt;”的十六进制表示显然,该表单使JSON无效。我似乎无法找到一种方法来使我能够以有效的形式通过JSON传递有角度的括号。 PHP端的“\ x3c”直接替换字符串不起作用。

此外,我知道将HTML指定为HTML将会起作用,但我传递了一组数据,因此使用了JSON。

2 个答案:

答案 0 :(得分:2)

试试这个:

echo json_encode( $ret, JSON_HEX_TAG );

使用json_last_error()进行调试。

http://www.php.net/manual/en/function.json-decode.php

答案 1 :(得分:1)

使用原生Chrome JSON对象(window.JSON),我能够解析你php程序的输出没问题,

"description" : "Height \x3c 200"

并且能够将其序列化为javascript JSON对象。

var jsonString = JSON.stringify({"description": "Height \x3c 200"});
//jsonString has the value "{"description":"Height < 200"}"

var jsonObject = JSON.parse(jsonString);
//jsonObject has an object that looks like this 
//Object
//description: "Height < 200"
//__proto__: Object

如果您需要与不支持本机JSON对象的浏览器兼容,我建议您使用JQuery等库。

此外,PHP中的json_encode()函数可以传递一个配置对象来自定义JSON的编码方式,如果您不喜欢'\ x3c',您可以将其更改为您的javascript解析器可能喜欢的内容更像是'≶':)

http://php.net/manual/en/function.json-encode.php