我有一个网站,用户可以在其中以及文本和图像等其他对象还可以将YouTube视频插入CKEditor类型的文本区域表单。
YouTube视频由iFrame对象嵌入。但我不希望用户能够插入除YouTube之外的任何其他iFrame(我相信你能猜到原因)
因此,在提交表单时,我想扫描$text变量中的所有iFrame,如果它们不指向youtube.com或youtube noookie.com 这些是允许来源的iFrame: 任务:<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/6dk-5HN4fvg" width="640"></iframe>
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube-nocookie.com/embed/IY37l4PDsao" width="640"></iframe>
这里有一种利用DOM和XPath来完成此任务的方法。
$doc = new DOMDocument;
@$doc->loadHTML($html);
$doc->removeChild($doc->doctype);
$xp = new DOMXPath($doc);
$tag = $xp->query("//iframe[not(contains(@src, 'youtube.com') or
contains(@src, 'youtube-nocookie.com'))]");
foreach ($tag as $t) {
$t->parentNode->removeChild($t);
}
echo $doc->saveHTML();