我正在从数据库中检索一些数据(所有使用准备好的语句)到一个数组中,然后将该数据输出为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字符。
和你的问题中的代码(略有修改,以执行没有ReferenceError
s):
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);
}