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)。现在通过创建一个新文件并将提交、清理和重定向分离到新文件来修复。很高兴知道这一问题解决了,您可以通过单击我的答案左上角的勾号将答案标记为已接受。我已更新了答案,以显示如何在代码中处理重定向。