我正在尝试使用jquery来获取数据,但是htmlentities存在问题,因为它在jquery中显示的是"
而不是"
。
这是我输入文字的代码:
<input type="text" name="material_name[]" id="material_name<?=$x?>" autocomplete="off" readonly="true" class="form-control oninput" />
这是JQUERY获取值
$.ajax({
url: 'fetchSelectedOrder.php',
type: 'post',
data: {productId : productId},
dataType: 'json',
success:function(response) {
// setting the rate value into the rate input field
$("#material_name"+row).val(response.material_name);
} // /success
}); // /ajax function to fetch the product data
}
fetchSelectedOrder.php
<?php
require_once 'checker.php';
$productId = $_POST['productId'];
$sql = "SELECT material_name FROM tbl_materials WHERE m_id = $productId";
$result = $controller->runQuery($sql);
$result->execute();
if($result->rowCount() >= 1) {
$row = $result->fetch(PDO::FETCH_ASSOC);
} // if num_rows
echo json_encode($row);
我使用htmlentities防止在数据库内部引用。
如何将"
提取为"
?
答案 0 :(得分:4)
您可以使用html_entity_decode()
将其转换回原始文本。
但是,我建议您在存储到数据库中时停止使用htmlentities()
。您无需阻止数据库中包含引号。如果在尝试存储语法时遇到语法错误,则应修复代码以使用参数化语句,而不是将变量替换为字符串。而且,如果您必须替换变量,则应使用适当的转义函数,mysqli::real_escape_string()
或PDO::quote()
。
如果要防止XSS,请在网页上显示输出时调用htmlentities()
。如果您使用JavaScript在网页上显示结果,请使用textContent
DOM属性或jQuery .text()
方法,而不要使用innerHTML
或.html()
。如果您要分配给value
属性,它将永远不会执行,因此您不需要进行任何编码。
答案 1 :(得分:1)
您可以使用以下函数来解码html:
function htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
// handle case of empty input
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
用法:
$("#material_name"+row).val(htmlDecode(response.material_name));
这会将html显示为真实文本。
答案 2 :(得分:1)
您可以解码来自服务器端数据库的HTML实体。
<?php
require_once 'checker.php';
$productId = $_POST['productId'];
$sql = "SELECT material_name FROM tbl_materials WHERE m_id = $productId";
$result = $controller->runQuery($sql);
$result->execute();
if($result->rowCount() >= 1) {
$row = $result->fetch(PDO::FETCH_ASSOC);
} // if num_rows
// Run html_entity_decode on all $row values
foreach ($row as $k => $v) {
$row[$k] = html_entity_decode($v);
}
echo json_encode($row);
对于具有不良值的数据库,这也是一个“补丁” ...但是,与依赖于最终用户设备的其他答案不同,这是服务器端解决方案。