在将数据传递给JavaScript之前使用htmlentities()是否可以接受?



我正在从数据库中检索一些数据(所有使用准备好的语句)到一个数组中,然后将该数据输出为JSON

然后我用JavaScript处理数据并将其显示在网页上(作为列表)。

是否可以在DB结果上运行htmlentities($data, ENT_QUOTES),因为我将它们添加到数组中,然后将其转换为JSON并输出?我这样做会遇到什么问题吗?

或者我应该使用JavaScript来完成所有这些?通常,在将数据直接输出到网页之前,我总是使用htmlentities(),但我不确定当我使用JSON和用JavaScript解析数据时是否可以这样做。据我所知,在JS中也没有类似的功能。

数据库有文本字段,可以包含任何东西(包括会破坏网页的东西)

编辑:示例代码(PHP端)

$DB_results = array('Test', '123', '<b>hello</b>', 'B&$B%');
echo json_encode($DB_results);

JS代码:

var db_results = JSON.parse(this.responseText); // this is from an AJAX query
var dbr_length = db_results.length;
for (var i = 0; var i < dbr_length; i++)
{
var li = document.createElement('li');
li.appendChild(document.createTextNode(years[i]));
document.getElementById('mylist').appendChild(li);   
}

我应该修改PHP代码如下(请记住htmlentities()将被添加,同时将数据添加到数组

$DB_results = array(
htmlentities('Test', ENT_QUOTES),
htmlentities('123', ENT_QUOTES),
htmlentities('<b>hello</b>', ENT_QUOTES),
htmlentities('B&$B%', ENT_QUOTES)
);
echo json_encode($DB_results);

我想你已经自己回答了这个问题,但是如果你想要更多的信心,你可以参考Document.createTextNode()的MDN文档:

创建新的Text节点。此方法可用于转义HTML字符。

和你的问题中的代码(略有修改,以执行没有ReferenceErrors):

document.body.appendChild(document.createElement('ul')).id = 'mylist';
const json = `["Test","123","<b>hello</b>","B&$B%"]`;
const dbResults = JSON.parse(json);
for (const str of dbResults) {
const li = document.createElement('li');
li.appendChild(document.createTextNode(str));
document.getElementById('mylist').appendChild(li);
}

最新更新