【发布时间】:2014-02-03 17:02:31
【问题描述】:
我有一个 php 页面,显示来自 mysql 表的信息,如下所示
$query = "SELECT * FROM `diccionary` WHERE `entry` LIKE 'a%' ORDER BY `entry`";
我将每个结果用作对不同 php 文件的第二次查询的输入:
$escaped = mysql_real_escape_string($row['entry']);
echo "<a href=editor.php?entry=$escaped>".$row['entry']."</a> |
在此页面返回的一些单词具有下一个格式,它们以这种方式返回:
word1 word2
词'
单词+
单词(-)
但是它们在 href=editor.php?entry=$escaped 部分没有正确发送,实际上只有以撇号结尾的是可以的,因为我使用的是“mysql_real_escape_string”函数,我尝试将其他转换为转义字符,但它不起作用,例如 ("+", "+", $row['entry'])。 这些是我在所有这些情况下看到的链接:
2 words = editor.php?entry=word1(没有后面的空格也没有 word2,这给了我所有与 word1 匹配的单词,如果有的话,但不是 word1 word2 的复合词)。
word' = editor.php?entry=word\' (因为这个功能是正确的,它也给了我正确的单词)。
word+ = editor.php?entry=word+(+ 应该被转义,因为如果我点击生成的链接,它不会给我任何结果,空白页)。
word (-) = editor.php?entry=word(这和2个单词的情况类似,除了括号也要转义,这个也产生空白页)。
我一直在寻找,我只能找到修复撇号的方法,我不知道如何修复其余的情况,任何帮助都会很有价值。
非常感谢。
【问题讨论】:
-
为什么要在 mysql 结果上使用 mysql_real_escape_string?
-
您不应该在 url 中向客户端发送转义数据。 sql 转义用于 sql 语句,而不是 http url。 sql 转义是在将特定字符串插入 sql 语句之前对特定字符串执行的 LAST 操作。不是你先做的事情,然后希望转义不会被所有中间系统破坏。
-
@Prashank 因为我正在生成链接。
-
@Marc B,对不起,我不是专家,我会按照我认为可行的方式来做,请建议我一个更好的方法来学习和应用它。
-
你不需要php.net/urlencode吗?
标签: php mysql sql escaping special-characters