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

时间:2013-08-16 18:11:36

标签: php javascript jquery html regex

我需要从HTML示例中删除一些特定的标记。 为了避免使用iframe,我使用curl并使用getJSON在PHP文件中获取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中做这个manupulation但是如果需要PHP也会工作

2 个答案:

答案 0 :(得分:1)

使用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以插入页面。

据我了解你的问题,这应该是你的申请流程:

  

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

答案 1 :(得分:0)

为什么不使用php中的$ strip_tag var去除异常?