【问题标题】:Remove specific tags from html while avoiding iframes从 html 中删除特定标签,同时避免 iframe
【发布时间】:2013-08-16 18:11:35
【问题描述】:

我需要从 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 中进行此操作,但如果需要 PHP 也可以工作

【问题讨论】:

  • 你区分服务器端和客户端吗?请记住这一点,重新表述您的问题
  • 您是否相信您正在吸引您的网站的页面内容?如果不是这样,您很容易受到使用此技术的客户端和服务器端攻击。
  • 感谢编辑@brad Mace
  • @LuisSiquot: 是的,在客户端我只需要我将附加到我的 div 的内容,而不是整个 HTML 结构,这就是我如何以这种方式删除标签我得到了可以附加到我的 div 的结构??
  • 是的,我确实相信我从该网站@AllInOne 吸取的内容

标签: php javascript jquery html regex


【解决方案1】:

使用 DOM 解析器,正则表达式不能用于解析 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

【讨论】:

  • 状态正常,但我没有收到此功能的任何响应
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2015-06-16
  • 2012-12-06
  • 2017-07-23
  • 2017-02-24
  • 2019-07-28
  • 1970-01-01
相关资源
最近更新 更多