如何在输入文本中使用jquery打印“(”)而不是“”?

时间:2018-09-04 00:11:58

标签: javascript php jquery

我正在尝试使用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);

数据库中的数据: enter image description here

我使用htmlentities防止在数据库内部引用。

如何将&quot;提取为"

3 个答案:

答案 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);

对于具有不良值的数据库,这也是一个“补丁” ...但是,与依赖于最终用户设备的其他答案不同,这是服务器端解决方案。


并且请阅读有关prepared statements的信息以防止注入...