我需要在json数组上应用htmlspecialchars / htmlentites吗?

时间:2012-09-08 15:12:44

标签: php jquery html-entities htmlspecialchars

我想问一下,在我通过ajax请求访问的php脚本中,我正在返回json数据(从数组转换)

 echo json_encode($row_array);

我在jquery中获取此数据并以表单形式显示。在返回数据之前,我是否需要应用htmlspecialchars / htmlentites?

那么这是做正确的方法吗?以下代码给出了一个错误:

echo htmlentities(json_encode($row_array));

感谢你 姆兰

3 个答案:

答案 0 :(得分:2)

背景很重要。

如果使用jQuery的value函数来填充它,如果它进入表单输入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));

在构建数组之后,或者在构建数组时,您必须首先在json编码之前转义$row_array的每个项目,或者使用array_map

一般情况下,您应该更喜欢htmlspecialchars而不是htmlentities,但您不一定需要其中任何一个。

答案 1 :(得分:1)

不要以这种方式应用htmlentities。你应该在json编码之前遍历数组并转义每个元素,然后json编码安全显示值的数组。在您的用法中,json只是数组的传输层。您没有显示json数组,只显示元素数据。不要转义传输层 - 它可能使json字符串无效。

答案 2 :(得分:0)

我刚刚遇到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);