在 HTML 中找到 iFrame 并检查其 SRC

Find iFrame in HTML and check its SRC

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

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

因此,当提交表单时,我想扫描所有 iFrame 的 $text 变量,如果它们没有指向 youtube.comyoutube-nocookie.com,删除那些 iFrame 标签。

这些是具有允许来源的 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();