Genel olarak konuşursak, using regex is not a good way to deal with HTML: standartlarda izin verilen pek çok çeşitleri vardır ... Ve tarayıcılar bile geçerli olmadığını kabul HTML: HTML düzenli ifadeler için yeterince düzenli değil!
In PHP, as your question is tagged as php, a great solution that exists to filter user input is the HTMLPurifier tool.
Ilginç şeyler bir çift vardır:
- Belirttiğiniz verir which specific tags are allowed
- Her etiket için tanımlayabilirsiniz which specific attributes are allowed
Temel olarak, fikir sadece yerine siyah-list (which will never be quite complete) kullanarak kötü şeyler kaldırmak için çalışmakla, (white-list) belirtmek ne tutmaktır.
And if you only specify a list of tags and attributes that can do no harm, only those will be kept -- and the risks of injections are lowered a lot.
Quoting HTMLPurifier's home page :
HTML Purifier is a standards-compliant
HTML filter library written in PHP.
HTML Purifier will not only remove
all malicious code (better known as
XSS) with a thoroughly audited,
secure yet permissive whitelist, it
will also make sure your documents are
standards compliant, something only
achievable with a comprehensive
knowledge of W3C's specifications.
Evet, başka büyük bir şey olduğunu the code you get as output is valid.
Tabii ki, bu sadece HTML giriş arındırmak / / filtresini temizlemek için izin verir; Eğer kullanıcı tarafından kullanılan URL hem de olduğunu doğrulamak için izin vermez:
- Doğru; Gerçek bir içeriğe yani puan
- Web sitesi tarafından tanımlandığı gibi "Tamam"; yani örneğin herhangi bir çıplaklık, ...
About the second point, there's not much one can do about it : the best solution will be to either :
- Online koymak konum önce bir moderatör kabul ettiniz / içeriğini reddetmek
- Bayrak web sitesinin kullanıcıların uygunsuz olarak bazı içerik bir yol verin, böylece bir moderatör eylemleri sürüyor.
Temelde, video içeriğini kendisi kontrol etmek, fazla seçenek yok ama bir insan "ok" veya "not ok" demek var.
About the first point, though, there's hope : some services that host content have APIs that you might want / be able to use.
Örneğin, Youtube bir API sağlar - Developer's Guide: PHP strong> bkz.
Senin durumunda, Retrieving a specific video entry bölümü umut verici görünüyor: Bu gibi görünen bir URL'ye HTTP isteği göndermek eğer:
http://gdata.youtube.com/feeds/api/videos/videoID
(Replacing "videoID" by the ID of the video, of course)
Video geçerli olup olmadığını, bazı ATOM yayınını alırsınız; ve "Geçersiz kimliği" eğer o değil
Bu içeriği en azından bazı URL doğrulamak yardımcı olabilir - Eğer kullanıcılar gibi her olası içerik barındırma hizmeti için bazı özel kod geliştirmek gerekecek olsa bile ...
Now, to extract the identifier of the video from your HTML string... If you're thinking about using regex, you are wrong ;-)
Bir HTML dize verilerinin bir kısmını elde etmek için en iyi çözüm genellikle için:
Ve DOM kullanarak da standart bir API kullanarak HTML belgeyi değiştirmek için izin verecek - yardımcı olabilir, bir sonraki video için bazı mesajı, ya da buna benzer başka bir şey eklemek istediğiniz durumda.