[英]PHP AJAX call to MySQL database. How to properly escape HTML data returned (json_encode) to page?
我的数据库包含带有包含的HTML脚本标记的记录。 我已经阅读了许多有关如何在使用json_encode / AJAX的情况下如何处理这种情况的选项。
我应该使用JS函数来转义客户端的特殊字符,还是可能缺少我缺少的PHP解决方案?
编辑假设:用户不想剥离/删除html标签,只想在服务器或客户端对它们进行编码的方法或建议!
PHP(process.php):
$records = array();
if($results = $db->query("SELECT * FROM cust_tbl")) {
if($results->num_rows) {
while($row = $results->fetch_object()) {
$records[] = $row;
}
echo json_encode($records);
$results->free();
}
}
AJAX:
function show() {
clear();
$.ajax({
type: "POST",
dataType: "json",
url: "process.php",
data: "action=show",
success: function(data) {
$.each(data, function(index, data) {
$('#tablebody').append('<tr>');
$('#tablebody').append('<td>' + data.JL_JOB_DATE + '</td>');
$('#tablebody').append('<td>' + data.JL_YR + '</td>');
$('#tablebody').append('</tr>');
});
}
});
}
如果您希望对要发送的HTML进行编码:可以使用htmlentities()
如果您要删除html标记并只保留文本,请使用strip_tags()
更新:
我在您的$.each
注意到, $.each
都有2个用于data
参数。 在$.each
,我通常这样做的是:
$.each(data, function() {
//use data.<column name>
});
除非您真的需要数据索引,否则建议您将其保留以提高可读性。 $.each
文档可以在这里找到 。
另外,请尝试一次完成全部附加操作。
$.each(data, function() {
$('#tablebody').append( '' +
'<tr>' +
'<td>' + data.<column name> + '</td>' +
'<td>' + data.<column name> + '</td>' +
'</tr>' +
'');
});
按照您的方式进行操作,基本上会创建一个新行,然后将表数据添加到表的末尾,而不是专门在所需的tr
中添加。
使用php strip_tags($ records);
http://www.w3schools.com/Php/func_string_strip_tags.asp
escape_.escape(string)
Escapes a string for insertion into HTML, replacing &, <, >, ", and ' characters.
_.escape('Curly, Larry & Moe');
=> "Curly, Larry & Moe"
在我的代码中添加了功能:
$.each(data, function(index, data) {
$('#tablebody').append('<tr>');
$('#tablebody').append('<td>' + escape(data.JL_JOB_DATE) + '</td>');
$('#tablebody').append('<td>' + escape(data.JL_YR) + '</td>');
$('#tablebody').append('</tr>');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.