用PHP帖子传递字符串的问题

时间:2010-05-05 12:32:11

标签: php post

基本上我正在开发一个(非常)简单的搜索引擎。您可以输入搜索词,然后您将进入结果页面 - 工作正常。但是在结果页面上,我有一个按钮,可以显示接下来的10个结果:$ term是$ _POST ['term']值。

echo "<input type='hidden' name='term' value='" . $term . "'>";

这导致以下问题,例如“aidan's”。

单击下一个10按钮时,该术语将变为“有效”,并且不会再找到任何结果。

我没有为$ term做任何事。

我通常使用Java,但我需要使用PHP来进行这项单一任务!

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:1)

可能是您的PHP逃脱了您的数据,请查看http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc和/或http://php.net/manual/en/function.addslashes.php这些应该可以帮助您识别问题

答案 1 :(得分:0)

尝试照看addslashes()和stripslashes() http://php.net/manual/en/function.addslashes.php

关于你的问题,我认为你应该尝试添加这样的东西:

$search = stripslashes($_POST['term']);

答案 2 :(得分:0)

如果使用双引号,则在使用变量时不必破坏字符串。您还可以使用各种选项,例如已提及的选项或htmlentities()urlencode()。我会使用后者,只是因为。所以你最终会得到:

$term = urlencode($term);
echo "<input type='hidden' name='term' value=\"$term\">";

答案 3 :(得分:0)

您需要htmlspecialchars() 输出到您的网页的每一位数据。像你这样的设置是世界上存在如此多的XSS漏洞的原因,你不应该为它们做出贡献。

echo "<input type='hidden' name='term' value='" . htmlspecialchars($term) . "'>";

一旦你拥有了它,你将不需要任何模糊的addslashes / quote escaping /以及其他任何东西。

为了使代码更容易,请定义

function h($s) {  htmlspecialchars($s); }

echo "<input type='hidden' name='term' value='" . h($term) . "'>";

答案 4 :(得分:0)

您正在寻找的功能是htmlspecialchars()。但是要使其工作,必须使用引号来包装参数。

另外,如果涉及斜杠,则可能需要stripslashes()功能。

所以:

$term = htmlspecialchars( stripslashes( $term ) );

echo '<input type="text" name="term" value="' . $term . '" >';

答案 5 :(得分:0)

  1. 始终使用GET方法进行搜索,而不是POST。
  2. 关闭魔术引号或手动删除斜线
  3. 使用带有ENT_QUOTES参数的htmllspecialchars来编码表单的字段值。
  4. 考虑按原样打印HTML,而不是使用PHP echo,以摆脱所有这些引用狂潮
  5. 最重要的部分。如果您引用数据库搜索的术语,请不要在表单中使用带引号的变量。
  6. 所以

    if (isset($_GET['term'])) {
      if (get_magic_quotes_gpc()) $_GET['term'] = stripslashes($_GET['term']);
      //$term=mysql_real_escape_string($_GET['term']);
      //perform search here. 
      //
      $term = htmlspecialchars($_GET['term'],ENT_QUOTES); //from $_GET again
      ?>
      <input type="hidden" name="term" value="<?php echo $term?>">
      <?
    }
    

答案 6 :(得分:-1)

我认为最简单的方法就是不要将$ term作为隐藏字段。对于分页,您可以在会话中记录搜索到的术语。

相关问题