我想问在我通过ajax请求访问的我的php脚本中,我正在返回json数据(从数组转换)
echo json_encode($row_array);
我在 jquery 中获取这些数据并以表格形式显示它。在返回数据之前我需要应用 htmlspecialchars / htmlentites 吗?
那么这样做的正确方法是什么?以下代码给了我一个错误:
echo htmlentities(json_encode($row_array));
谢谢伊姆兰
我想问在我通过ajax请求访问的我的php脚本中,我正在返回json数据(从数组转换)
echo json_encode($row_array);
我在 jquery 中获取这些数据并以表格形式显示它。在返回数据之前我需要应用 htmlspecialchars / htmlentites 吗?
那么这样做的正确方法是什么?以下代码给了我一个错误:
echo htmlentities(json_encode($row_array));
谢谢伊姆兰
上下文很重要。
value
如果您使用 jQuery 的val()
函数来填充数据,那么如果数据进入表单输入,则根本不需要在服务器端转义数据。
示例:http: //jsfiddle.net/Y6TWv/1/
var data = '<strong>STRONG TEXT</strong>';
$('input').val(data); // output is escaped
$('p').text(data); // output is escaped
$('p').html(data); // output is not escaped
此外,如果您要转义数据,请不要这样做:
// escapes the entire json string, not good - quotes will be broken
echo htmlentities(json_encode($row_array));
在构建数组之后,或者在构建数组时,您必须在$row_array
对其进行 json 编码之前对 first 的每个项目进行转义。array_map
一般来说,你应该更喜欢htmlspecialchars
,htmlentities
但你不太可能需要任何一个。
不要以这种方式应用 htmlentities。您应该在 json 编码之前遍历数组并转义每个元素,然后 json 编码安全显示值的数组。在您的使用中,json 只是数组的传输层。您没有显示 json 数组,只是显示元素数据。不要逃避传输层——它可能会使 json 字符串无效。
我只是在 JSON 数组中遇到了单引号问题。Chrome 不喜欢通过 ajax 返回的 JSON 响应中的单引号。我用 htmlspecialchars(, ENT_QUOTES) 转义了每个值。
$theoptions['MemberList'] = array();
while($row = mssql_fetch_assoc($result)) {
$memberelement = array(
'Display'=> htmlspecialchars($row['FullName'], ENT_QUOTES),
'Value' => $row['ID']);
$theoptions['MemberList'][] = $memberelement;
}
header('Content-Type: application/json');
echo json_encode($theoptions);