Php 我是否需要在json数组上应用htmlspecialchars/HTMLEntes?

Php 我是否需要在json数组上应用htmlspecialchars/HTMLEntes?,php,jquery,html-entities,htmlspecialchars,Php,Jquery,Html Entities,Htmlspecialchars,我想问一下,在我通过ajax请求访问的php脚本中,我返回的json数据(从数组转换而来)就是这样的 我在jquery中获取这些数据,并将其显示在表单中。在返回数据之前是否需要应用htmlspecialchars/HTMLEntes 那么正确的方法是什么呢?以下代码给出了一个错误: echo htmlentities(json_encode($row_array)); 谢谢你 Imran不以这种方式应用HTML属性。您应该在json编码数组之前遍历它并转义每个元素,然后json编码safe数组

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

我在jquery中获取这些数据,并将其显示在表单中。在返回数据之前是否需要应用htmlspecialchars/HTMLEntes

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

echo htmlentities(json_encode($row_array));
谢谢你
Imran

不以这种方式应用HTML属性。您应该在json编码数组之前遍历它并转义每个元素,然后json编码safe数组以显示值。在您的使用中,json只是阵列的传输层。您没有显示json数组,只显示元素数据。不要转义传输层——这可能会使json字符串无效。

上下文很重要

如果使用jQuery的
val()
函数来填充数据,那么如果数据进入表单输入的
值,则根本不需要在服务器端转义数据

例如:

在对
$row_array
进行json编码之前,您必须首先转义它的每个项,或者在构建数组之后,或者在构建数组时转义


一般来说,您应该更喜欢
htmlspecialchars
而不是
htmlentities
,但您不太可能需要任何一个。

我只是在JSON数组中使用单引号时遇到了问题。Chrome不喜欢通过ajax返回的JSON响应中的单引号。我用htmlspecialchars(,ENT_引号)对每个值进行了转义


自己测试不是更容易吗?你现在可能已经完成了…@WesleyMurch,这是一个有效的问题。即使他已经测试过,它也可能有效,但仍然有问题。@Brad:“有效”并不意味着“好”。这表明没有任何研究努力。你说“它可能已经工作了,但仍然有问题”是什么意思?@WesleyMurch,你可以创建破坏的HTML,并摆脱它。例如,他可能已经将直接的JSON数据输出到HTML中,直到JSON数据包含
的那一天,情况可能还不错。@Brad:显然,这就是要测试的类型。。。HTML字符。
echo htmlentities(json_encode($row_array));
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));
$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);