我想将字符串的非字母数字字符替换为空格。
我用过$title= preg_replace("/[^a-zA-Z0-9\s]/", " ", $title);
所以当用户输入
时ABC!?d $
它将是
abc d
但是由于用户将其输入到文本输入,它会转到“x.php?title = abc!?d $”。 我想要它去“x.php?title = abc + d” 因为我想要“abc d”,“abc $$$$$$$$$ d”,“abc __。!d”等去同一个网址。 我怎么能管理这个。谢谢。
答案 0 :(得分:6)
基本上,你所说的是,如果彼此相邻的可替换字符不止一个,那么你只想在那里放一个空格字符。是吗?
在这种情况下,是的,这很容易:你只需要在正则表达式中的字符类之后添加一个加号,如下所示:
$title = preg_replace("/[^a-zA-Z0-9\s]+/", " ", $title);
加号告诉正则表达式寻找前一项的一个或多个匹配。
希望有所帮助。
答案 1 :(得分:0)
要摆脱不需要的字符,请使用以下代码:
$_GET['title'] = 'abc__.!d';
$title = preg_replace('/[^a-zA-Z0-9\s]+/', ' ', $_GET['title']); // "abc d"
现在,只需重定向到正确的网址(如果需要)
if ($_GET['title'] != $title) {
header('Location: ....');
die('Redirect to ...URL...');
}
答案 2 :(得分:0)
您是否尝试过\W
开关来匹配非aplha字符? (与+
)
$title= preg_replace(/\W+/g, " ", $title);
(在JavaScript中你也需要/g
标志,不确定这是否适用于PHP)
编辑:
该要求规定应删除所有_
,因此以下方法可行。
(\W|_)+
但是,最好在这个实例中规定你想要的确切字符,而不是试图建立一个排除列表,就像我的asnwer开始那样。