我用php和mysql建立了一个搜索引擎。
问题:当我提交一个带有撇号的单词,并使用$_GET将值返回给文本字段时,撇号已经被一个反斜杠替换,并且撇号后面的所有字符都丢失了。
示例:提交的单词:Just can't get enough
返回值(使用$_GET):Just can\
url也是这样出现的:search=just+can%27t+get+enough
正如您所看到的,‘已被替换为\,缺少获取足够的内容。
问:有人知道这是什么原因造成的吗?解决这个问题的解决方案是什么?
发布于 2011-06-08 07:17:05
从你对"value to the text field“的描述中,我推测你有一些类似下面的输出代码:
Redisplay
<input value='<?=$_GET['search']?>'>在这种情况下,所包含的单引号将终止html属性。单引号后面的任何东西对浏览器来说都是垃圾。在这种情况下,将htmlspecialchars应用于输出会有所帮助。
(在输出文本之前,反斜杠可能是由于magic_quotes或mysql_*_escape造成的。我怀疑这个问题在这里描述了一个数据库错误。)
更新:看起来这确实是一个输出问题:
echo "<a href='searchmusic.php?search=$search&s=$next'>Next</a>";无论您使用单引号还是双引号,您都需要:
echo "<a href='searchmusic.php?search="
. htmlspecialchars(stripslashes($search))
. "&s=$next'>Next</a>";(请注意,在这里使用stripslashes是一种解决方法。您应该保留原始搜索文本,或者更确切地说是disable the magic_quotes。)
好吧,我忘了一些重要的东西。htmlspecialchars需要ENT_QUOTES参数-始终如此,在您的情况下尤其如此:
// prepare for later output:
$search = $_GET['search'];
$html_search = htmlspecialchars(stripslashes($search), ENT_QUOTES);然后在你想要显示$search的任何地方使用它:
echo "<a href='searchmusic.php?search=$html_search&s=$next'>Next</a>";发布于 2011-06-08 07:16:15
如果您运行的是低于5.3.0的PHP,斜杠可能会由您可以在.ini文件中关闭的Magic Quotes添加。
发布于 2011-06-08 07:11:39
单引号在PHP和MySQL中很重要。
在PHP中,单引号是字符串的分隔符,例如:
$str = 'my string';如果要在字符串中包含文字引号,则必须告诉PHP引号不是字符串的末尾。它使用反斜杠进行转义,例如:
$str = 'my string with a quote \' inside it';有关这方面的更多信息,请参阅PHP Strings。
MySQL的运作方式与此类似。一个示例查询可能是:
$username = 'andyb';
$quert = "SELECT * FROM users WHERE user_name = '$username'";单引号分隔字符串参数。如果$username包含单引号,这将导致查询过早结束。正确转义参数是一个需要熟悉的重要概念,因为它是入侵数据库的一种攻击载体-有关更多信息,请参阅SQL Injection。
处理这种转义的一种方法是使用mysql_real_escape_string()。
https://stackoverflow.com/questions/6272606
复制相似问题