我创建了一个textarea,用于个人信息,包含主题。它被传递给Javascript / jQuery函数,该函数将其传递给PHP文件以存储在数据库中。但是,当使用特殊字符(如&符号,小于,大于,撇号,加号和引号)时,它不会正确存储在我的数据库中。所以不用说,当我检索数据时,数据显示不正确。
这是HTML:
<input id="pmsubject" placeholder="Subject"><br />
<textarea id="pmtext" placeholder="Send a private message"></textarea>
<button id="pmBtn" onclick="postPm(pmsubject,pmtext)">Send</button>
这是Javascript / jQuery(部分):
function postPm(subject,textarea){
var data = $("#textarea").val();
var data2 = $("#subject").val();
我做了一些错误检查和处理,然后用AJAX发送我的信息:
type: "POST",
url: "pm_system.php",
data:"data="+data+"&data2="+data2,
到目前为止这么好吗?这是我存储代码的pm_system.php部分:
$data = htmlentities($_POST['data']);
$data = mysqli_real_escape_string($db_con, $data);
$data2 = htmlentities($_POST['data2']);
$data2 = mysqli_real_escape_string($db_con, $data2);
$sql = "INSERT INTO pm(subject, message)
VALUES('$data2','$data')";
$query = mysqli_query($db_con, $sql);
mysqli_close($db_con);
所以,如果我写下一条消息说,我是猫+狗的忠实粉丝。 &#34;有时&#34;鸟类。我的输出是:
I\'m a big fan of cats dogs
它总是在引号和撇号前添加斜杠,总是用空格替换+符号,并且在&符号后面没有任何内容。我已尝试在Javascript中替换这样的字符:
data = data.replace(/\"/g, '"'); //Just using one for example
但这也不起作用。如何从数据库中的textarea中保存这些字符,不加改变?
答案 0 :(得分:2)
我猜,您通过JavaScript函数收到的数据已经被转义。因此,当您输入I'm a big fan of cats dog
时,您的PHP脚本中会得到I\'m a big fan of cats dogs
。当您使用mysqli_real_escape()
时,您正在添加另一个转义字符。
所以你可能想在之前替换转义字符:
$data = stripslashes($_POST['data']);
$data = mysqli_real_escape_string($db_con, $data);
$data2 = stripslashes($_POST['data2']);
$data2 = mysqli_real_escape_string($db_con, $data2);
$sql = "INSERT INTO pm(subject, message)
VALUES('$data2','$data')";
$query = mysqli_query($db_con, $sql);
mysqli_close($db_con);
我不建议使用htmlentities()
,而是将数据“按原样”保存到数据库中,否则全文搜索等内容无法正常工作。
+号的问题可能是因为您将值作为查询字符串data:"data="+data+"&data2="+data2
发送,而在URL中,+符号用于空格。要解决这个问题,您应该将数据作为对象传递:
type: "POST",
url: "pm_system.php",
data: { "data": data, "data2": data2 },
这也应该解决大多数其他有问题的角色。
答案 1 :(得分:0)
我建议您尝试htmlspecialchars()
而不是htmlentities()
。我在使用htmlentities()
时遇到了一些问题并输出了过去的数据。使用htmlspecialchars()
解决了它。