php / mysql escape&字符和+字符

时间:2014-02-03 17:57:03

标签: php mysql

我正在尝试在我的数据库中输入一些文本,用户输入的文本。但是我遇到了一些特殊字符的问题,即“&”和“+”。

当文本涉及&时,该句子被切断,并且该字符中的任何内容都不会添加到数据库中。对于+,它使整个条目为空。

我不明白,因为我用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);

(数据在“消息”中)。我应该如何处理数据,以便在请求中安全地传达数据?

3 个答案:

答案 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 ;.您应该检查解析变量