正则表达式以排除有效URL的字符

时间:2010-01-24 21:38:47

标签: php regex validation url-rewriting

我想创建一个过滤器,它允许几乎所有字符但没有/ < > ? =
我在某个网站上看过,我应该使用^ char里面的范围,但如果我尝试它就不能正常工作:

mod_rewrite的:

RewriteRule ^(user/)([^\<\>\?=]+)([/]?)$    user.php?username=$2

php验证:

return eregi ("[^\<\>\?=/]", $value);

我是如何设置正确的过滤器以允许所有字符而不是< > ? = /在我的范围内?

为了安全性或兼容性,某人可能会对某些其他字符不应该插入url字符串吗?

考虑我应该使用以下网址:
http://www.last.fm/music/小林武史
http://www.last.fm/music/Trentemøller {
{1}}

3 个答案:

答案 0 :(得分:1)

这对于mod_rewrite PHP:

都应该足够了
([^/<>?=]+)

顺便说一句,你不应该在PHP中使用eregi(),而是使用preg_match()代替i修饰符。

答案 1 :(得分:1)

首先,我认为您不需要在角色类中转义所有这些角色。试试这个:

RewriteRule ^(user/)([^<>?=/]+)(/?)$    user.php?username=$2

其次,不要使用eregi,这很疯狂(并且已弃用)。请改用preg_match:

return preg_match("|[^<>?=/]|", $value);

HTH。

答案 2 :(得分:0)

把它放在口语中,“你做错了”。如果您不担心脚本中的安全性 ,那么任何阻止任何字符的数量都不会真正使您的应用程序无法完全切断连接。