Linkleri + suratlar için filtre kullanıcı girişi (paragraf)

2 Cevap php

Ben XSS önlemek için kullanıcı girdileri olabilir mevcut filtre çeşit bakıyorum. Muhtemelen bunun için htmlspecialchars kullanabilirsiniz. Ama aynı zamanda tüm bağlantıları (uymalıdır o ise a.com, www.a.com ve http://www.a.com ve http://www.aaaaaaaaaaaaaaaaaaaaaaaaaa.com daha sonra bunu göstermesi gerekir ayrıştırmak mümkün olmak istiyorum aaa .. a.com gibi), e-postalar ve suratlar.

Ben bu konuda gitmek için en iyi yolu nedir merak ediyorum. Şu anda bazı regex ile bir php fonksiyonu kullanıyorum, ancak birçok kez regex sadece başarısız olur (çünkü bağlantı tanıma yanlış vs) olduğunu. Google Chat (hatta a.com işleri) sırasında kullanılan çözümleyici çok benzer bir şey istiyorum.

Zaman ayırdığınız için teşekkür ederiz.

2 Cevap

Suratlar için (eğer PECL'de yükleyebilirsiniz sürece php 5.2.0 veya üstü gerekir) http://www.php.net/manual/en/book.bbcode.php bakmak isteyebilirsiniz

(! Deneyin) bir dizeden link almak için kolay bir yolu, bu gibi bir şeydir:

$text = 'I am looking at some sort of existing filter which can sanitize 
the user input to avoid XSS. Probably I can use htmlspecialchars for that. 
But at the same time I want to be able to parse all links (should match 
a.com, www.a.com and http://www.a.com and if it is 
http://www.aaaaaaaaaaaaaaaaaaaaaaaaaa.com then it should display it 
as aaa..a.com), e-mails and smileys.

I am wondering what is the best way to go about it. I am currently using 
a php function with some regex, but many times the regex simply fails 
(because of link recognition is incorrect etc.). I want something very 
similar to the parser used during Google Chat (even a.com works).';

preg_match_all('/\S+\.(?:com|org|net)/i', $text, $urls);

print_r($urls);

Üretir:

Array
(
    [0] => Array
        (
            [0] => a.com
            [1] => www.a.com
            [2] => http://www.a.com
            [3] => http://www.aaaaaaaaaaaaaaaaaaaaaaaaaa.com
            [4] => aaa..a.com
            [5] => a.com
        )

)

Yani: Ve (possible!) adresler eşleşen sonra, listeyi sterilize olabilir. 'aaa .. a.com' gibi geçersiz olanları kaldırın ve 'http://www.aaaaaaaaaaaaaaaaaaaaaaaaaa.com' gibi çok uzun URL'ler kısaltmak.

Ben bir büyük, unmaintainable regex şeyi tıkınma önermiyoruz. Adımlarda bunu.

İyi şanslar!

PS. Söylemeye gerek yok, sen / tld Kullanıcı kendiniz listesini genişletmek gerektiğini olabilir. Sadece bir örnek oldu: (com | | org net?).