PDO和撇号=没有mysql_real_escape_string,但它打破了页面

时间:2016-12-20 12:44:25

标签: javascript php ajax

当我将变量传递给PHP脚本时,我首先检查它是否为isset,不是空白,检查它是否为字符串并且长度大于1且小于255(数据库varchar字段限制)然后我通过它运行它:

$f_name= stripslashes(htmlentities($_POST["f_name"], ENT_QUOTES));

然后我使用PDO准备更新f_name字段。当我拿到它把它放在页面上时我解码它:

html_entity_decode($row["f_name"], ENT_QUOTES);

将它在JSON数组中返回到启动fetch的AJAX调用,然后将其解析为输入字段。

如果f_name字段保存了撇号,那么一切都可以正常工作,并使用JavaScript将其放入输入字段。它只是切掉了撇号和其后的任何东西。我怎样才能阻止这种情况发生?

var response = "<input type='text' id='f_name' value='"+rdata.patient[0].f_name+"' onkeydown='onedit(1)' maxlength='255' />";

1 个答案:

答案 0 :(得分:0)

value='"+rdata.patient[0].f_name+"'

您正在使用'个字符来分隔每个属性的值。如果数据中有'个字符,则它将结束属性值。您需要将其表示为&apos;

更好(更安全,更易读)的方法是使用标准DOM生成HTML而不是一起粉碎字符串。

var input = document.createElement("input");
    input.id = "f_name";
    input.value = rdata.patient[0].f_name;
    input.addEventListener("keydown", function () { onedit(1); });
    input.maxlength = 255;