将 HTML 中的标签替换为 DOMDocument

2023-11-21

我正在尝试在 php 中使用 DOMDocument::loadHTML 编辑 html 标签。 html 数据是html 的一部分,而不是整个页面。我关注了这个页面的内容(PHP - DOMDocument - 需要用新标签更改/替换现有 HTML 标签) says.

这应该将 pre 标签转换为 div 标签,但它会给出“致命错误:未捕获异常‘DOMException’,并显示消息‘未找到错误’。”

<?php
$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;

$dom = new DOMDocument;
@$dom->loadHTML($contents);

foreach( $dom->getElementsByTagName("pre") as $nodePre ) {
    $nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
    $dom->replaceChild($nodeDiv, $nodePre);
}

echo $dom->saveHTML();
?>

[编辑] 当我尝试向后迭代节点对象时,出现此错误:“注意:尝试获取非对象的属性...”

<?php
$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;

$dom = new DOMDocument;
@$dom->loadHTML($contents);
$domPre = $dom->getElementsByTagName('pre');
$length = $domPre->length;

    For ($i = $length; $i > -1 ; $i--) {
        $nodePre = $domPre->item($i);
        echo $nodePre->nodeValue . '<br />';
//      $nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
//      $dom->replaceChild($nodeDiv, $nodePre);
    }

    // echo $dom->saveHTML();
?>

[编辑] 好的,解决了。由于回答的代码有一些错误,我在这里发布解决方案。谢谢大家。

解决方案:

<?php
$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;

$dom = new DOMDocument;
@$dom->loadHTML($contents);
$domPre = $dom->getElementsByTagName('pre');
$length = $domPre->length;

For ($i = $length - 1; $i > -1 ; $i--) {
    $nodePre = $domPre->item($i);
    $nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
    $nodePre->parentNode->replaceChild($nodeDiv, $nodePre);
}

echo $dom->saveHTML();
?>

问题是调用replaceChild()。而不是

$dom->replaceChild($nodeDiv, $nodePre);

use

$nodePre->parentNode->replaceChild($nodeDiv, $nodePre);

update

这是一个工作代码。替换多个节点似乎存在一些问题(更多信息在这里:http://php.net/manual/en/domnode.replacechild.php)所以你必须使用回归循环来替换元素。

$contents = <<<STR
<pre>hi</pre>
<pre>hello</pre>
<pre>bye</pre>
STR;

$dom = new DOMDocument;
@$dom->loadHTML($contents);

$elements = $dom->getElementsByTagName("pre");
for ($i = $elements->length - 1; $i >= 0; $i --) {
    $nodePre = $elements->item($i);
    $nodeDiv = $dom->createElement("div", $nodePre->nodeValue);
    $nodePre->parentNode->replaceChild($nodeDiv, $nodePre);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 HTML 中的标签替换为 DOMDocument 的相关文章

  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 负载平衡集群中的 PHP 会话 - 如何?

    好的 我得到了这个完全罕见的负载平衡 PHP 网站的独特场景 令人遗憾的是 它过去没有进行负载平衡 现在我们开始遇到问题 目前唯一的问题是 PHP 会话 当然 一开始没有人想到这个问题 因此 PHP 会话配置保留为默认值 因此 两台服务器都
  • 为什么验证不起作用并跳转到另一个页面?

    我写了一个customer display php来验证数据 到目前为止只有名字 但无论名字字段是否为空 网页都会跳转到customer search php并且没有更改数据库中的信息 为什么
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • Magento - 检查 cms 页面

    我想通过 php 检查页面是否是 Magento 中的 cms page 我需要不同的 cms 页面面包屑 所以我尝试在一个条件下做到这一点 但我不知道如何或在哪里查看 到目前为止 这是我的 breadcrumbs phtml p some
  • 如何在 yii2 中使用两个不同的模型登录或切换身份类别?

    我想允许用户从两个不同的模型登录 配置文件 user gt identityClass gt app models User one more class here enableAutoLogin gt false authTimeout
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • Joomla 页面中的自定义 php 代码

    我正在尝试将 Joomla 1 5 9 页面中的表源从页面中的硬编码 html 更改为从 SQL 数据库获取信息 执行此操作的正确方法是什么 创建一个新的模型或组件并以某种方式在页面中使用它 我找到了这些 http docs joomla
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 如何仅使用 PHP5 RecursiveDirectoryIterator 类递归显示具有特定文件类型的文件夹和子文件夹

    您好 我正在尝试使用 FilterIterator 上的扩展来获取 RecursiveDirectoryIterator 类 但由于某种原因 它仅在根目录上进行迭代 我的代码是这样的 class fileTypeFilter extends
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • 检查条件并通过 Zend 中的 Regex 识别 url 中的模式

    我正在实现 Zend Regex 路由 并且必须对 url 执行多次检查 例如 如果这是我的网址 http localhost application public index php module controller action 这是
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正

随机推荐

  • QComboBox AbstractItemView::item

    有没有办法可以增加 QComboBox 控件中列出的项目的高度 我尝试按照此处的建议进行操作在 QTDevNet 论坛中但没有运气 QComboBox QAbstractItemView item margin top 3px 我也尝试过这
  • 将 numpy 类型转换为 python

    我有一个从 pandas 生成的以下形式的字典列表 我想把它转换成json格式 list val 1 0 685 2 0 8 output json dumps list val 但是 json dumps 抛出错误 TypeError 6
  • PHP:如何使用 smtp 设置发送带有附件的电子邮件?

    我使用以下代码成功发送电子邮件 但现在我想在电子邮件中附加一个文本文件 例如 test txt 任何想法 require once Mail php from Usman lt email protected gt to Naveed lt
  • 具有 byte[] 字段作为存储过程参数的 DataTable

    我一直在重复使用这种使用 DataTable 作为存储过程参数的方法 并且效果很好 这是简化的工作代码 using dbEntities dbe new dbEntities var dt new dataTable dt Columns
  • 使用 OpenCV fitEllipse() 进行圆拟合

    使用OpenCV是否有效拟合椭圆用于圆拟合 fitEllipse 返回cv RotatedRect如何平均宽度和高度来获得拟合的圆半径 我认为使用的 有效性 cv fitEllipse拟合圆取决于您所需的拟合精度 例如 您可以在测试集上运行
  • HTMLCanvasElement 上未解决的方法 captureStream

    我的画布元素和方法有奇怪的情况captureStream 根据文档 HTMLCanvasElement 有一个方法captureStream 然而我的 Angular6 应用程序声称没有这样的方法 所以这段代码将不起作用 let canva
  • ITextSharp 解析包含图像的 HTML:它解析正确,但不会显示图像

    我正在尝试使用 ITextSharp 库从 html 生成 pdf 我能够创建 pdf 并将 html 文本转换为 pdf 文本 段落 我的问题 pdf 不显示我的图像 我的imghtml 中的元素 我所有的img我的 html 中的 ht
  • 如何 git 应用 git word diff

    我需要编辑一个混乱的提交 该提交仅更改了后续几行中的一个单词 保留其中一些更改并删除其他更改 这些变化很容易看出git diff word diff 并且以这种格式 我可以轻松地编辑帅哥来做我想做的事情 但现在我有一个像这样的文件 diff
  • 减少 App Store 中 iOS 应用程序的大小

    我正在尝试在 App Store 中提交应用程序 如果可能的话 我需要稍微减少其内存 我尝试了一种方法 我将在下面描述 来使我的应用程序更轻 但运气不佳 Details 我按照以下步骤查看导致尺寸如此之大的原因 将项目存档 分发它 节省用于
  • 简单的自定义事件

    我正在尝试学习自定义事件 并尝试创建一个 但似乎我遇到了问题 我创建了一个表单 静态类和自定义事件 我想要实现的是 当我按下按钮时 Form 将调用静态类函数 然后 func 将不时引发一个事件来报告当前状态 Form1 将侦听该事件是否引
  • 如何点击 Android 按钮然后转到 google play 应用程序

    我想知道如何制作一个 android 按钮可以点击并将用户重定向到 google play 示例 我想在用户单击我的活动中的按钮后将用户发送到 android 应用程序 https play google com store apps de
  • 更改 woocommerce 中每行的产品数量

    我正在使用 woocommerce 和 themefores 模板 默认情况下 woocommerce 每行显示 4 个产品 但我想显示 5 个 我正在使用子模板 因此我复制了 woocommerce 文件 并且里面有 content pr
  • apache-airflow 1.9 默认时区设置为非 utc

    我最近将气流版本从 Airflow 1 8 升级到 apache airflow 1 9 升级成功 并且我使用 Celery Executor 扩展了环境 一切似乎都工作正常 但 dag 和任务开始日期 执行日期等都出现在UTC 时区和计划
  • 正确终止在线程中运行的 Flask Web 应用程序

    How to properly terminate a flask web application that was launched in a separate thread I found an incomplete answer th
  • 使用 IIS 中托管的 WCF 处理长时间运行的服务操作的正确方法是什么?

    我正在构建一个 WCF 服务 该服务将公开多个操作 它将在 IIS 中运行 因为它需要 HTTPS 端点 大多数操作将在几秒钟或更短的时间内完成 但是 其中一两项操作将需要 5 至 90 分钟 该服务的主要使用者将是 ASP NET MVC
  • 创建/加入线程时隐式同步

    是什么minimal需要框架x考虑到创建 加入线程时隐含的同步 此代码的工作类型 std atomic volatile 没有什么 include
  • MySQL - 处理这种分层数据的最佳方法?

    这是以下内容的后续内容 MySQL 是否可以获取层次结构中的所有子项 我有一个任意深度邻接表模型表 我现在的情况是can将其转换为嵌套集合模型 我阅读了有关如何使用嵌套集合模型的 MySQL 数据 尽管执行插入 更新和删除等基本功能似乎变得
  • CMake 无法在 Windows 上创建 MakeFile

    当我尝试跑步时cmake 它确实生成了一堆文件 但没有创建 MakeFile CMakeLists txt PROJECT main CMAKE MINIMUM REQUIRED VERSION 3 16 AUX SOURCE DIRECT
  • 透明 NSCollectionView 背景

    我再次努力将 NSViews 背景颜色设置为透明 我有一个NSCollectionView作为 的一部分NSClipView这是一个的一部分NSScrollview My MainViewController有一个出口collectionV
  • 将 HTML 中的标签替换为 DOMDocument

    我正在尝试在 php 中使用 DOMDocument loadHTML 编辑 html 标签 html 数据是html 的一部分 而不是整个页面 我关注了这个页面的内容 PHP DOMDocument 需要用新标签更改 替换现有 HTML