Geçerli bir URL için karakter dışlamak için düzenli ifade

3 Cevap php

I'd like to create a filter which allows almost all chars but without / < > ? =
I've read in some site, I shoud use the ^ char inside ranges, but if I try it doesn't work properly:

mod_rewrite:

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

doğrulama için php:

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

Ben tüm karakter izin doğru filtreyi ayarlamak için yazmak değil < > ? = / Benim aralığında shoud nasıl?

Birisi başka bir karakter güvenlik veya uyumluluk için url dize takılı olmamalıdır bana sugest olabilir?

consider I should work with URLs like:
http://www.last.fm/music/小林武史
http://www.last.fm/music/Trentemøller
http://www.last.fm/music/Lindstrøm+&+Prins+Thomas

3 Cevap

Bu, her iki mod_rewrite PHP için yeterli olmalıdır:

([^/<>?=]+)

BTW, i değiştirici ile yerine preg_match() kullanmak, PHP eregi() kullanmamalısınız.

Öncelikle, ben sizin karakter sınıfında tüm bu karakterleri kaçmak gerek sanmıyorum. Bunun yerine bu deneyin:

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

İkincisi, eregi kullanmak istemiyorum, deli (ve önerilmemektedir) bulunuyor. Bunun yerine preg_match kullanın:

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

HTH.

Argo koymak için, "ur yanlış yapıyorsun". Eğer güvenlik endişesi değilseniz in your script daha sonra herhangi bir karakter engelleme hiçbir miktarı gerçekten uygulaması tamamen bağlantısını keserek kısa güvenli yapacaktır.