Php 从GET form url中删除非字母数字方法

Php 从GET form url中删除非字母数字方法,php,regex,get,Php,Regex,Get,我有一个method=“GET”表单,在提交时生成foo.php?id=userinput 我目前使用的是preg_replace(“/\W | /”,“”,$_GET['id')删除GET字符串中的所有非字母数字字符,该字符串在后端运行良好(添加到数据库等(我没有插入到数据库,这只是示例)),但url链接不会清除,并且会导致用户输入的内容加上浏览器编码 因此,如果用户输入f&oo)(£b$%a&r£1backed可以很好地创建foobar1,但url结果为foo.php?id=f%26+oo+

我有一个
method=“GET”
表单,在提交时生成foo.php?id=userinput

我目前使用的是
preg_replace(“/\W | /”,“”,$_GET['id')
删除GET字符串中的所有非字母数字字符,该字符串在后端运行良好(添加到数据库等(我没有插入到数据库,这只是示例)),但url链接不会清除,并且会导致用户输入的内容加上浏览器编码

因此,如果用户输入
f&oo)(£b$%a&r£1
backed可以很好地创建
foobar1
,但url结果为
foo.php?id=f%26+oo+(£b%24%25a%26r£1

是否可以清除url结果?如果可以,如何清除

更新:

提交代码:

if(!$_GET['id']) {

 header('location: index.php');
 exit;

} else {

 $get_id = preg_replace("/\W|_/", "", $_GET['id']);

}

您可以在
preg\u replace
方法执行URL重定向后使用此PHP代码:

if(!$_GET['id']) {
   header('location: index.php');
   exit;
} else if ( preg_match('/[\W_]/', $_GET['id']) ) {
    $get_id = preg_replace('/[\W_]/', "", $_GET['id']);
    header('Location: ' $_SERVER["SCRIPT_URI"] . $get_id);
    exit;
}

问题不在于正则表达式。你可以重定向,但为什么你会关心试图破解或垃圾邮件你的表单的人的url是什么样子?url将被共享(fb、twitter等)所以我想要一个干净的url。如果用户故意发送垃圾,您可能不应该共享…您是否重新分配了替换的url?现在我发现
页面没有正确重定向
(FF),或者
此网页有一个重定向循环
(chrome)。现在通过创建一个新文件并将提交、清理和重定向分离到新文件来修复。很高兴知道这一问题解决了,您可以通过单击我的答案左上角的勾号将答案标记为已接受。我已更新了答案,以显示如何在代码中处理重定向。