我想像上面一样用Facebook只删除iframe(以及iframe内的所有内容),但要保留youtube iframe:
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.example.com%2F%3Fp%313098&layout=standard&show_faces=true&width=500&action=recommend&colorscheme=light" ></iframe>
要阻止 iframe 从 YouTube 上获取:
<iframe width="640" height="360" src="https://www.youtube.com/embed/hiYtWYLEjlI?rel=0" frameborder="0" allowfullscreen></iframe>
我有这个正则表达式,但它只会删除
<'/*i(?:frame|layer)|l(?:ayer|ink)[^>]*+>
https://regex101.com/r/eM9eS3/5
最好采用xpath
方法:
$xml = simplexml_load_string($your_html_string);
$iframes = $xml->xpath("//iframe[contains(@src, 'facebook.com')]");
并删除这些:
for ($i=0;$i<count($iframes);$i++) {
$iframe = $iframes[$i];
unset($iframe[0][0]);
}
您的新 XML 如下所示:
echo $xml->asXML();
作为整个功能:
function goAwayFacebook($html) {
$xml = simplexml_load_string($html);
$iframes = $xml->xpath("//iframe[contains(@src, 'facebook.com')]");
for ($i=0;$i<count($iframes);$i++) {
$iframe = $iframes[$i];
unset($iframe[0][0]);
}
return $xml->asXML();
}
$newhtml = goAwayFacebook($html);
因此,
您粗略地尝试检查www.facebook.com
是否存在于<ifram>
中。这可以使用以下正则表达式来实现。
正则表达式:(?=.*www'.facebook'.com.*)<iframe .*<'/iframe>
解释:
-
(?=.*www'.facebook'.com.*)
检查<iframe>
标记之间是否存在www.facebook.com
。
正则表达式 101 演示