我正在尝试在我的数据库中输入一些文本,用户输入的文本。但是我遇到了一些特殊字符的问题,即“&”和“+”。
当文本涉及&时,该句子被切断,并且该字符中的任何内容都不会添加到数据库中。对于+,它使整个条目为空。
我不明白,因为我用mysqli_real_escape_string来逃避特殊字符
以下是查询:
$texte=mysqli_real_escape_string($texte);
$bdd->query('INSERT INTO messages (idconversation, texte, id_emeteur, id_recepteur, invitation) VALUES ('.$idConversation.', \''.$texte.'\',\''.$idEmeteur.'\',\''.$idDestinatere.'\',\''.$invite.'\')');
有什么想法吗? :/
EDIT! (首先,所有插入数据库的数据都是生成的,而不是来自用户,除了$ text变量)
根据你的建议,我已经研究了这个过程中的其他步骤。看起来它与mysql或php无关。在此过程的早期,使用ajax传输数据。这是代码
xhr.open("POST", "index.php?page=repondreMessage", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("message="+nouveaumessage+"&pseudo="+destinataire+"&tickbox="+tickbox);
(数据在“消息”中)。我应该如何处理数据,以便在请求中安全地传达数据?
答案 0 :(得分:2)
&和也不是用mysql中的+字符。
你的问题是你正在使用包括许多脚本和图层的整个软件复杂,但出于某种原因仅仅归咎于mysql。您必须整理不同的图层并验证进入和退出每个图层的数据。通过这种方式,你会找到一个责备层。
答案 1 :(得分:2)
您将遇到比&
和+
更大的问题 - 如果任何其他数据是用户数据,您对SQL注入有很大的兴趣。
正如您的常识所指出的,MySQL中的字符串中没有&
或+
的已知问题。您需要仔细检查数据是否符合预期。试试echo $texte;
- 您几乎肯定会在那里找到您没想到的角色。
我对您实际问题的最佳猜测:您正在使用$_GET
(或可能){{1}中未正确编码的数据}}。例如,在这种情况下,
$_POST
http://mydomain.com/?texte=foo + bar
不是$_GET['texte']
;它是foo + bar
,因为foo bar
被视为网址中的空格。在这个例子中,
+
http://mydomain.com/?texte=foo &bar
不是$_GET['texte']
;它是foo &bar
,因为foo
被视为参数分隔符;服务器认为你有另一个参数&
(没有值)。
答案 2 :(得分:0)
首先,mysqli_real_escape_string()接受两个参数。你只有一个。第二个mysqli_real_escape_string不会转义任何+或&amp ;.您应该检查解析变量