Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将文本字段(';+;lt;>;$)中的特殊字符保存到数据库中,然后使用PHP检索它们?_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript 如何将文本字段(';+;lt;>;$)中的特殊字符保存到数据库中,然后使用PHP检索它们?

Javascript 如何将文本字段(';+;lt;>;$)中的特殊字符保存到数据库中,然后使用PHP检索它们?,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我为个人信息创建了一个文本区域,带有主题。它被传递到一个Javascript/jQuery函数,该函数将它传递到一个PHP文件以存储在数据库中。但是,当使用特殊字符(如:与、小于、大于、撇号、加号和引号)时,它不会正确存储在我的数据库中。因此,不用说,当我检索数据时,数据没有正确显示 以下是HTML: <input id="pmsubject" placeholder="Subject"><br /> <textarea id="pmtext" placehol

我为个人信息创建了一个文本区域,带有主题。它被传递到一个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>
我执行一些错误检查和处理,然后使用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);
因此,如果我写一条信息说,我是猫+狗和“有时”鸟的超级粉丝。我的输出是:

I\'m a big fan of cats dogs
但这也不行。如何将这些字符从数据库中的文本区域保存下来,而不进行更改?

我建议尝试
htmlspecialchars()
而不是
htmllenties()
。我过去在
htmlentities()
和输出数据方面遇到过一些问题。使用
htmlspecialchars()
解决了这个问题。

我想,通过JavaScript函数接收的数据已经转义了。因此,当您输入
我是猫狗的超级粉丝
时,您会在PHP脚本中看到
我是猫狗的超级粉丝
。当您使用mysqli\u real\u 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 },

这也可以解决大多数其他有问题的字符。

我很久没有使用PHP了,但我很确定mysqli中有一个功能,可以在查询中填充变量,而不必实际转义变量,然后将它们添加到字符串中。是的,这就是预处理语句。你可以看看那些。。。我相信有一个unescape()方法或类似的东西。@ChristianStewart你的意思是我想我是:)我认为这可能是他研究的合理起点。我不知道这是否有帮助,但如果你将数据作为键值对的对象传递,jQuery将为你做编码:
data:{“data”:data,“data2”:data2}
这不提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时在自己的帖子上发表评论,一旦您有足够的评论,您就可以发表评论。我如何将其作为对象传递<代码>数据:“action=new_pm&fuser=“+fuser+”&tuser=“+tuser+”&data=“+data+”&data2=“+data2,
stripslashes()
处理好了报价单……马上就到了!就像我上面的例子一样。JavaScript中的对象如下所示:
{“key_1”:“value_1”,“key_2”:“value_2”}
因此,对于查询,您应该有如下内容:
数据:{“action:{“action”:new_pm,“fuser”:fuser,“tuser”:tuser,“data”:data,“data2”:data2‌ }。但您可能希望将JS变量重命名为与数据、操作等不同的名称,以免与jQuery AJAX optoins混淆。谢谢2ndkauboy!除了符号和加号之外,我所有字符都可以工作。它不会在“&”之后保存数据库中的任何内容!我考虑过这样做:
data=data.replace(/&/g,[amp]');
在我的JS中,那么在PHP中:
$data=str_replace(“[amp]”,“&“,$”POST['data']);
你可能想在你的JS函数中尝试
data=encodeURI(data)
。这应该可以解决那些特殊字符。如果它们在PHP中的编码超过两倍,请使用
$data=urldecode($data)
再次对其进行解码。
$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);
type: "POST",
url: "pm_system.php",
data: { "data": data, "data2": data2 },