【问题标题】:How To Remove encoded symbols From GET Variable PHP如何从 GET 变量 PHP 中删除编码符号
【发布时间】:2016-06-27 20:20:31
【问题描述】:

如何删除在 get 变量中转换的编码符号。我知道我可以使用 javascript 和一些浏览器端验证来做到这一点,但我也想确保在服务器端删除这些以防万一。

例如,在搜索框中,有人可能会输入“你多大了?” Get 变量将问号转换为 %25253F 。如何从变量中的 get 查询中删除这部分?我想在过滤后再次使用这个 get 字符串。当前代码:

$searchquery = str_replace(' ', '-',$_GET['search']);
$uri = preg_replace('/[^-a-zA-Z0-9]/', '', $searchquery);
$checkquery = $uri;
$queryplain = str_replace('-', ' ',$uri);

【问题讨论】:

  • $_GET 被填充时,它会解码回?
  • 不,因为我删除了 $uri 变量中的所有特殊字符,$queryplain 将显示:How Old Are You 25253f
  • 你为什么不使用 PHP 函数htmlspecialchars_decode 再次解码你的字符串?
  • 因为我在代码的其他部分使用了字符串,所以我想确保在主代码中使用它之前完全对其进行清理。我只需要字符串中的字母和数字,这样可以确保在将字符串显示给用户时可以安全地使用它。 更新以更好地解释
  • 对 URL 进行编码的目的是使它可以安全地传递给服务器。服务器不应该知道任何东西已经被编码。您的问题是某些内容已被三重编码,并且应该在事物的另一端进行修复。此外,一个简单的字符串操作不应该需要四个单独的变量。

标签: php string filter get


【解决方案1】:

我想通了。这是由于帖子表单被重写,然后被 .htaccess 文件重定向。将表单从类似 search.php 更改为 /search/ 可以解决获取变量的问题,这反过来又允许我使用上面提供的代码删除特殊字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多