【问题标题】:Remove HTML Attributes using PHP使用 PHP 删除 HTML 属性
【发布时间】:2014-05-31 08:23:32
【问题描述】:

使用 PHP 我想删除除

之外的所有 HTML 属性

“src” 属性来自 “img” 标签

“href” 属性来自 “a” 标记

我的输入文件是由.doc.docx

转换而来的.html文件

我的输出文件再次应该是 HTML 文件 删除属性

请帮帮我

编辑 ::

在尝试如下亚历山大脚本后,如果我在代码编辑器中打开 strip.html,我看不到任何更改

<?php
$path = '/var/www/strip.html';
$html = file_get_contents($path);
$dom = new DOMDocument();
$dom->strictErrorChecking = false;
$dom->formatOutput = true;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
if (false === ($elements = $xpath->query("//img"))) die('Error');

foreach ($elements as $element) {
    for ($i = $element->attributes->length; --$i >= 0;) {
        $name = $element->attributes->item($i)->name;
        if ('src' !== $name) {
            $element->removeAttribute($name);
        }
    }
}

if (false === ($elements = $xpath->query("//a"))) die('Error');

foreach ($elements as $element) {
    for ($i = $element->attributes->length; --$i >= 0;) {
        $name = $element->attributes->item($i)->name;
        if ('href' !== $name) {
            $element->removeAttribute($name);
        }
    }
}

$dom->saveHTMLFile($path);

?>

【问题讨论】:

  • @stefan 如何让它像我输入 html 并单击一个按钮我应该要求保存处理后的 html 文件一样工作???
  • 该链接应该可以帮助您入门,我不会为您构建您的应用程序,但在您获得 html 之后,无论如何,通过正则表达式传递它。

标签: php


【解决方案1】:

使用DOMDocument类解析HTML("a""img"标签处理):

$path = '/path/to/file.html';
$html = file_get_contents($path);
$dom = new DOMDocument();
//$dom->strictErrorChecking = false;
$dom->formatOutput = true;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
if (false === ($elements = $xpath->query("//img"))) die('Error');

foreach ($elements as $element) {
    for ($i = $element->attributes->length; --$i >= 0;) {
        $name = $element->attributes->item($i)->name;
        if ('src' !== $name) {
            $element->removeAttribute($name);
        }
    }
}

if (false === ($elements = $xpath->query("//a"))) die('Error');

foreach ($elements as $element) {
    for ($i = $element->attributes->length; --$i >= 0;) {
        $name = $element->attributes->item($i)->name;
        if ('href' !== $name) {
            $element->removeAttribute($name);
        }
    }
}

$dom->saveHTMLFile($path);

另外,阅读why you can't parse [X]HTML with regex 并查看useful xpath links

更新(所有标签除了"a""img"属性处理):

$path = '/path/to/file.html';
$html = file_get_contents($path);
$dom = new DOMDocument();
//$dom->strictErrorChecking = false;
$dom->formatOutput = true;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
if (false === ($elements = $xpath->query("//*"))) die('Error');

foreach ($elements as $element) {
    for ($i = $element->attributes->length; --$i >= 0;) {
        $name = $element->attributes->item($i)->name;
        if (('img' === $element->nodeName && 'src' === $name)
            || ('a' === $element->nodeName && 'href' === $name)
        ) {
            continue;
        }

        $element->removeAttribute($name);
    }
}

$dom->saveHTMLFile($path);

【讨论】:

  • 这是输出与输入相同的文件...我所做的:将您提供的代码保存为 php ,将 $path 值更改为输入文件路径还添加了一个新字符串 $pathh 用于输出路径并在最后一行将 $path 更改为 $pathh .. 在浏览器中加载了 php 文件。我收到的输出与 $pathh 目录中的输入相同 .. 属性未删除
  • @PHPGeany 确实,你做错了什么,因为这段代码没问题。证明:codepad link
  • @PHPGeany“在浏览器中加载了 php 文件”?你在本地机器上安装了 http-server 吗?您是否尝试通过控制台运行此代码,例如“php codesource.php”?浏览器没有集成 php-interpreter,这就是为什么在浏览器中加载 php-code 什么都不做。
  • 找到我在原始问题中所做的编辑我使用灯泡堆栈我尝试使用本地浏览器作为 localhost/path.php
  • error_log 中是否有任何错误/警告?试试把$dom-&gt;saveHTMLFile($path);改成var_dump($dom-&gt;saveHTML());看看是不是删除属性有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2021-05-29
相关资源
最近更新 更多