删除html中的特定标记,同时避免使用iframe


Remove specific tags from html while avoiding iframes

我需要从HTML示例中删除一些特定的标记。为了避免使用iframe,我在PHP文件中使用curl和getJSON获得了一个HTML页面。我在my.js中得到结果,但我不会把整个HTML粘贴到我自己的div中。我想这是因为在一个HTML结构中不能有多个HTML、HEAD和BODY标记。

<!DOCTYPE html>
<html>
    <head>
        <style>some style</style>
        <title>Title of the document</title>
    </head>    
    <body>
        The content of the document......
    </body>
</html>

现在在上面的结构中,我不需要HTML、BODY和HEAD标记,但我确实需要CSS的STYLE标记,所以我只想删除HTML、BODY和HEAD标签。删除后,我需要将其附加到div中(所有这些麻烦都是因为我不想使用iframe)。如何删除它?我想到了strip_tags()preg_replace或一些正则表达式函数,但不明白最好的方法。请帮我找到最好的方法。它可以是PHP、JavaScript或JQuery。但如果答案是在javascript和jquery中,我会通知你,因为我想在JS中进行操作,但如果需要,PHP也可以使用

使用DOM Parser,regex不用于解析HTML。

以下示例使用DOMDocument解析器提取所需的元素。$html是使用cURL检索的HTLM文档。

libxml_use_internal_errors(true); //Prevents Warnings, remove if desired
$dom = new DOMDocument();
$dom->loadHTML($html);
$styleNode = $dom->getElementsByTagName("style")->item(0);
$style = $dom->saveHTML($styleNode);
$body = "";
foreach($dom->getElementsByTagName("body")->item(0)->childNodes as $child) {
    $body .= $dom->saveHTML($child);
}
echo $style;
echo $body;

假设这个脚本是用getJson调用的,那么用$style$body创建一个json对象,并将其传递回要插入页面的javascript。

正如我理解你的问题,这应该是你的申请流程:

客户端加载页面->.getJSON调用一个php脚本->所述php脚本用cURL从其他地方加载内容->此代码运行->json对象被传递回.getJSON->来自.getJSON的成功回调将新HTML添加到页面

为什么不在php中使用$strip_tag var来剥离异常?