Регулярное выражение для исключения символов для действительного URL - PullRequest
1 голос
/ 25 января 2010

Я хотел бы создать фильтр, который позволяет использовать практически все символы, но без / < > ? =
Я читал на каком-то сайте, я должен использовать ^ char внутри диапазонов, но если я попробую, он не будет работать правильно:

mod_rewrite:

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

PHP для проверки:

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

как мне написать, чтобы установить правильный фильтр, разрешающий все символы, но не < > ? = / в моем диапазоне?

Может ли кто-нибудь предложить мне другой символ, который не должен быть вставлен в строку URL для безопасности или совместимости?

считаю, что я должен работать с URL-адресами, такими как:
<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="nofollow noreferrer">http://www.last.fm/music/小林武史</a>
<a href="http://www.last.fm/music/Trentem%C3%B8ller" rel="nofollow noreferrer">http://www.last.fm/music/Trentemøller</a>
<a href="http://www.last.fm/music/Lindstr%C3%B8m+&+Prins+Thomas" rel="nofollow noreferrer">http://www.last.fm/music/Lindstrøm+&+Prins+Thomas</a>

Ответы [ 3 ]

1 голос
/ 25 января 2010

Во-первых, я не думаю, что вам нужно избегать всех этих персонажей в вашем классе персонажей. Попробуйте вместо этого:

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

Во-вторых, не используйте eregi, это безумие (и не рекомендуется). Вместо этого используйте preg_match:

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

НТН.

1 голос
/ 25 января 2010

Этого должно быть достаточно для обоих mod_rewrite PHP:

([^/<>?=]+)

Кстати, вы не должны использовать eregi() в PHP, вместо этого используйте preg_match() с модификатором i.

0 голосов
/ 25 января 2010

Чтобы поместить это в разговорный, «ты делаешь это неправильно». Если вы не беспокоитесь о безопасности в вашем скрипте , то никакие блокирующие символы не сделают ваше приложение действительно безопасным, за исключением полного отключения соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...