首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >撇号问题

问撇号问题
EN

Stack Overflow用户
提问于 2011-06-08 07:05:47
回答 3查看 5.6K关注 0票数 3

我用php和mysql建立了一个搜索引擎。

问题:当我提交一个带有撇号的单词,并使用$_GET将值返回给文本字段时,撇号已经被一个反斜杠替换,并且撇号后面的所有字符都丢失了。

示例:提交的单词:Just can't get enough

返回值(使用$_GET):Just can\

url也是这样出现的:search=just+can%27t+get+enough

正如您所看到的,‘已被替换为\,缺少获取足够的内容。

问:有人知道这是什么原因造成的吗?解决这个问题的解决方案是什么?

代码:http://tinypaste.com/11d62

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-08 07:17:05

从你对"value to the text field“的描述中,我推测你有一些类似下面的输出代码:

代码语言:javascript
复制
 Redisplay
 <input value='<?=$_GET['search']?>'>

在这种情况下,所包含的单引号将终止html属性。单引号后面的任何东西对浏览器来说都是垃圾。在这种情况下,将htmlspecialchars应用于输出会有所帮助。

(在输出文本之前,反斜杠可能是由于magic_quotes或mysql_*_escape造成的。我怀疑这个问题在这里描述了一个数据库错误。)

更新:看起来这确实是一个输出问题:

代码语言:javascript
复制
  echo "<a href='searchmusic.php?search=$search&s=$next'>Next</a>";

无论您使用单引号还是双引号,您都需要:

代码语言:javascript
复制
  echo "<a href='searchmusic.php?search="
      . htmlspecialchars(stripslashes($search))
      . "&s=$next'>Next</a>";

(请注意,在这里使用stripslashes是一种解决方法。您应该保留原始搜索文本,或者更确切地说是disable the magic_quotes。)

好吧,我忘了一些重要的东西。htmlspecialchars需要ENT_QUOTES参数-始终如此,在您的情况下尤其如此:

代码语言:javascript
复制
// prepare for later output:
$search = $_GET['search'];
$html_search = htmlspecialchars(stripslashes($search), ENT_QUOTES);

然后在你想要显示$search的任何地方使用它:

代码语言:javascript
复制
  echo "<a href='searchmusic.php?search=$html_search&s=$next'>Next</a>";
票数 0
EN

Stack Overflow用户

发布于 2011-06-08 07:16:15

如果您运行的是低于5.3.0的PHP,斜杠可能会由您可以在.ini文件中关闭的Magic Quotes添加。

票数 1
EN

Stack Overflow用户

发布于 2011-06-08 07:11:39

单引号在PHP和MySQL中很重要。

在PHP中,单引号是字符串的分隔符,例如:

代码语言:javascript
复制
$str = 'my string';

如果要在字符串中包含文字引号,则必须告诉PHP引号不是字符串的末尾。它使用反斜杠进行转义,例如:

代码语言:javascript
复制
$str = 'my string with a quote \' inside it';

有关这方面的更多信息,请参阅PHP Strings。

MySQL的运作方式与此类似。一个示例查询可能是:

代码语言:javascript
复制
$username = 'andyb';
$quert = "SELECT * FROM users WHERE user_name = '$username'";

单引号分隔字符串参数。如果$username包含单引号,这将导致查询过早结束。正确转义参数是一个需要熟悉的重要概念,因为它是入侵数据库的一种攻击载体-有关更多信息,请参阅SQL Injection。

处理这种转义的一种方法是使用mysql_real_escape_string()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6272606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档