在 HTML 中找到 iFrame 并检查其 SRC
Find iFrame in HTML and check its SRC
我有一个网站,用户可以在其中 除了文本和图像等其他对象外 还可以将 YouTube 视频插入 CKEditor 类型的文本区域表单中。
YouTube 视频由 iFrame 对象嵌入。但我不希望用户能够插入除 YouTube 之外的任何其他 iFrame(我相信你能猜到原因)
因此,当提交表单时,我想扫描所有 iFrame 的 $text 变量,如果它们没有指向 youtube.com 或 youtube-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>
任务:
- 找到 iFrame
- 求其SRC的值
- 检查它是否是允许的域
- 如果不删除它,或禁用它,但保留周围的其余部分HTML
- 检查是否还有另一个
这是利用 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();
我有一个网站,用户可以在其中 除了文本和图像等其他对象外 还可以将 YouTube 视频插入 CKEditor 类型的文本区域表单中。
YouTube 视频由 iFrame 对象嵌入。但我不希望用户能够插入除 YouTube 之外的任何其他 iFrame(我相信你能猜到原因)
因此,当提交表单时,我想扫描所有 iFrame 的 $text 变量,如果它们没有指向 youtube.com 或 youtube-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>
任务:
- 找到 iFrame
- 求其SRC的值
- 检查它是否是允许的域
- 如果不删除它,或禁用它,但保留周围的其余部分HTML
- 检查是否还有另一个
这是利用 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();