【发布时间】: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 进行编码的目的是使它可以安全地传递给服务器。服务器不应该知道任何东西已经被编码。您的问题是某些内容已被三重编码,并且应该在事物的另一端进行修复。此外,一个简单的字符串操作不应该需要四个单独的变量。