Tumblr和其他博客网站允许人们发布来自youtube和所有视频网络的嵌入式视频代码.
但他们如何只过滤flash对象代码并删除任何其他html或脚本?甚至他们都有一个自动代码,告诉你这不是一个有效的视频代码.
这是使用REGEX表达式完成的吗?是否有PHP类可以做到这一点?
谢谢
一般来说,使用正则表达式不是处理HTML的好方法:HTML对于正则表达式来说不够常规:标准中允许的变化太多......浏览器甚至接受无效的HTML!
在PHP中,当您的问题被标记为时php
,过滤用户输入的一个很好的解决方案是HTMLPurifier工具.
一些有趣的事情是:
它允许您指定允许的特定标签
对于每个标记,您可以定义允许的特定属性
基本上,我们的想法是只保留你指定的内容(白名单),而不是试图使用黑名单删除不良内容(这将永远不会完整).
如果您只指定一个不会造成伤害的标签和属性列表,那么只会保留这些标签和属性 - 并且注入的风险会降低很多.
引用HTMLPurifier的主页:
HTML Purifier是一个用PHP编写的符合标准的HTML过滤器库.
HTML Purifier不仅会删除所有恶意代码(更好地称为XSS),并且具有经过全面审核,安全且允许的白名单,还可以确保您的文档符合标准,只有通过全面了解W3C的规范才能实现.
是的,另一件好事是你输出的代码是有效的.
当然,这只会让你清理/过滤/净化HTML输入; 它不允许您验证用户使用的URL是:
正确 即指向真实的内容
您网站定义的"确定"; 即例如没有裸露,......
关于第二点,关于它的人无能为力:最好的解决方案是:
让主持人在上传内容之前接受/拒绝内容
为网站的用户提供一种方式,将某些内容标记为不当内容,以便主持人采取措施.
基本上,要检查视频的内容本身,没有太多选择,但有人说" 好 "或" 不好 ".
但是,关于第一点,有希望:托管内容的某些服务具有您可能想要/能够使用的API.
例如,Youtube提供了一个API - 请参阅开发人员指南:PHP.
在您的情况下,检索特定视频条目部分看起来很有希望:如果您将HTTP请求发送到如下所示的URL:
http://gdata.youtube.com/feeds/api/videos/videoID
(当然,用视频的ID替换"videoID")
如果视频有效,你会得到一些ATOM提要; 和"无效的身份证",如果不是
这可能有助于您至少验证一些内容的URL - 即使您必须为用户喜欢的每种可能的内容托管服务开发一些特定的代码...
现在,从HTML字符串中提取视频的标识符...如果您正在考虑使用正则表达式,那么您错了;-)
从HTML字符串中提取部分数据的最佳解决方案通常是:
使用DOM解析器加载HTML ; DOMDocument::loadHTML
这里通常很有帮助
使用DOM方法浏览文档; 或者,根据您的情况:
DOMDocument::getElementsByTagName
,如果您需要迭代具有特定标记名称的所有元素; 例如,可能很好地迭代所有或
标签
或者,如果你需要更复杂的东西,你可以做一个XPath查询,使用了DOMXPath
类和它的DOMXPath::query
方法.
使用DOM还允许您使用标准API修改HTML文档 - 这可能有所帮助,以防您想在视频旁边添加一些消息,或任何其他类似的东西.