在HTML中查找iFrame并检查其SRC


Find iFrame in HTML and check its SRC

我有一个网站,用户可以在其中以及文本和图像等其他对象还可以将YouTube视频插入CKEditor类型的文本区域表单。

YouTube视频由iFrame对象嵌入。但我不希望用户能够插入除YouTube之外的任何其他iFrame(我相信你能猜到原因)

因此,在提交表单时,我想扫描$text变量中的所有iFrame,如果它们不指向youtube.comyoutube 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>

任务:

  1. 查找iFrame
  2. 查找其SRC的值
  3. 检查它是否是允许的域
  4. 如果不删除或禁用它,但保留周围HTML的其余部分
  5. 检查是否还有其他

这里有一种利用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();