如何使用 PHP DOMDocument::saveHTML() 阻止 html 实体?

2023-12-12

由于自定义存储需求(“为什么”在这里并不重要,谢谢!)我必须保存 html<a>特定格式的链接,例如:

myDOMNode->setAttribute("href", "{{{123456}}}");

一切正常,直到我打电话saveHTML()在包含的 DOMDocument 上。这会杀死它,因为它编码{ in %7B.

这是一个遗留应用程序,其中 href="{{{123456}}}" 作为占位符。命令行解析器会准确地查找此模式(未编码)并且无法更改。

我别无选择,只能这样做。

我无法 htmldecode() 结果。

这个 HTML 永远不会像这样显示,它只是一个存储需求。

感谢您的帮助!

注意:我已经环顾了 2 个小时,但所提出的解决方案都不适合我。对于那些盲目地将问题标记为重复的人:请发表评论并让我知道。


由于遗留代码正在使用{{{...}}}作为占位符,使用有点黑客的方法可能是安全的预替换回调。生成 HTML 后,以下内容将恢复 URL 编码的占位符:

$src = <<<EOS
<html>
    <body>
        <a href="foo">Bar</a>
   </body>
</html>
EOS;

// Create DOM document
$dom = new DOMDocument();
$dom->loadHTML($src);

// Alter `href` attribute of anchor
$a = $dom->getElementsByTagName('a')
    ->item(0)
    ->setAttribute('href', '{{{123456}}}');

// Callback function to URL decode match
$urldecode = function ($matches) {
    return urldecode($matches[0]);
};

// Turn DOMDocument into HTML string, then restore/urldecode placeholders 
$html = preg_replace_callback(
    '/' . urlencode('{{{') . '\d+' . urlencode('}}}') . '/',
    $urldecode,
    $dom->saveHTML()
);

echo $html, PHP_EOL;

输出(为了清晰起见缩进):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <body>
        <a href="{{{123456}}}">Bar</a>
    </body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHP DOMDocument::saveHTML() 阻止 html 实体? 的相关文章

  • 纠正装饰器模式的一个大缺点

    不久前 我在重构一些游戏战斗代码时决定尝试装饰器模式 战斗者可以拥有各种被动能力 也可能是不同类型的生物 我认为装饰器可以让我在运行时以各种组合添加行为 因此我不需要数百个子类 我几乎已经完成了 15 个左右的被动能力装饰器 在测试中我发现
  • 使用 Laravel 4 验证多个文件上传

    如何在 Laravel 4 中验证上传文件的数组 我已将其设置为允许多个文件 并且已测试这些文件是否存在于 Input file files 数组中 但如何验证每个文件呢 这是我尝试过的 notesData array date gt In
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • 通过 Ajax 加载内容时,WORDPRESS 音频播放器未加载,MediaElement.js 未应用

    我正在创建一个 WordPress 主题 当我使用 ajax 加载内容时 它不会将 MediaElements js 应用于我的音频播放器 因此不会显示音频 我认为这是因为 MediaElement js 加载了 wp footer 并且此
  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • PHP 会话不适用于游戏

    我正在尝试模仿一款名为 SKUNK 用骰子玩 的游戏来完成一项作业 我无法让会话正常工作 这是我第一次使用 PHP 我还被告知无需会议即可完成 这是我的代码
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito

随机推荐

  • iPad 版 Three20

    我需要在我的 iPad 项目中使用 Three20 我想知道 iPhone 版本的 Three20 项目是否可以直接在 iPad 上使用 还是应该等待这个时间表完成 http two20 info timeline roadmap OS 3
  • Apache Camel - IBM MQ 集成

    我有一个 Apache Camel 版本 2 18 项目 它通过 IBM MQ 客户端将文件发送到我合作伙伴的 IBM MQ 服务器 然而 我的伙伴使用messageId作为文件名 因此 我们必须将特定的文件名设置为messageId 我的
  • 我收到 'int' 对象不可下标

    我是 python 新手 我首先尝试为我的项目实现代码 我的错误代码是 int 类型的对象没有 len 这是我的代码并添加了 str 来解决问题 xored value ord Mblocks i len Mblocks ord Cbloc
  • 使用 ORMLite 准备查询的 SQL 异常

    我正在使用 ORM ORMlite 并且所有调用都进展顺利 直到出现以下错误 线程 main 中的异常org h2 jdbc JdbcSQLException SQL语句中的语法错误 SELECT FROM STORIES WHERE TI
  • 如果使用 docker 部署,为什么 MERN 应用程序无法与后端通信?

    我使用 Docker 将 MERN 应用程序部署到数字海洋 Droplet 如果我运行我的docker compose yml文件本地在我的电脑上运行良好 我有 2 个容器 1 个后端 1 个前端 如果我尝试在 Droplet 上进行组合
  • JSONDecodeError:额外数据:第 1 行第 228 列(字符 227)

    我正在使用 Ipython 进行一些数据分析 我无法加载 JSON 文件 请帮我在 IPython 中加载这个 JSON 文件 我还想跳过第一行中的相同单词以使其成为干净的格式 我希望每条记录如下所示 station id 72 num b
  • 字符串到字典字数统计

    所以我在家庭作业问题上遇到了麻烦 编写一个函数 word counter input str 它接受字符串 input str 并返回一个字典 将 input str 中的单词映射到其出现次数 所以到目前为止我的代码是 def word c
  • 如何在 Rails 中的 Chartkicks 中显示数据计数以及百分比

    Using chartkicks用于显示图表 它仅显示百分比 我想显示数量 金额以及百分比 Chartkickgem 是上面的包装Google Charts 通过使用库选项 您可以指定在legend并设置其他配置选项 所以像这样 有关更多配
  • 尝试更改 Google 云端硬盘中文件的所有者

    我尝试更改云端硬盘中文档的所有权 但收到以下错误 很抱歉 服务器发生错误 请稍等一下 然后重试 第 12 行 文件 代码 function transferFiles var files DriveApp getFiles while fi
  • JNA 与 Fortran 假定大小的数组

    我有一个 Fortran 子例程 采用假定大小的数组 subroutine sub arr implicit none double precision arr end subroutine 我使用 JNA 从 Java 进行了本机调用 F
  • Delphi:发生意外的内存泄漏

    在 Delphi 中 我已配置为报告内存泄漏 IFDEF Debug ReportMemoryLeaksOnShutdown true ENDIF After exiting the program I get the following
  • 在bash shell脚本中初始化动态变量(可变变量)

    我通过 bash shell 使用 PHP CLI 请检查在 shell 脚本中操作数组 由 php cli 打印 了解详情 在下面的 shell 代码中我能够回显key value我从 PHP 脚本中获得的对 IFS parse php
  • wp7水平滑动选择

    我正在寻找一个允许我滑动项目列表的控件 水平滑动将在下一个和上一个项目之间移动 该控件还将确保所选项目在不被操作时移动到中心 该控件仅占据页面的一半 我希望左侧和右侧的选项可见并环绕 Like so lt gt 所以我的问题是 这样的控件是
  • Google Play - 零支持的设备

    我知道这里有类似的问题 但似乎没有一个令人满意的答案 我正在尝试发布应用程序 但无论我尝试什么 开发人员控制台都会报告支持的设备数为零 这是我的完整清单
  • 如何获取R脚本出错时的行号?

    如果我从命令行运行一个很长的 R 脚本 R slave script R 那么我怎样才能让它在错误时给出行号呢 如果可能的话 我不想将调试命令添加到脚本中 我只是希望 R 表现得像大多数其他脚本语言一样 这不会给您行号 但它会告诉您调用堆栈
  • WPF 与 Windows 窗体

    我对 WPF 和 Windows 窗体非常困惑 WPF 相对于 Windows 窗体的用途是什么 WPF有什么用 WPF 是一个用于开发 Windows 和浏览器 应用程序的新平台 WPF不一定有replaceWindows 窗体 使用 W
  • Dojo 中的 DataGrid,包含来自 servlet 的 json 数据

    我第一次使用 JSON 并想用我的 JSON 数据填充我的数据网格 这是我的 JSON 数据 head vars s fname lname results bindings s type uri value http tn gov in
  • 按键对散列进行分组并对值求和

    我有一个哈希数组 Vegetable gt 10 Vegetable gt 5 Dry Goods gt 3 gt Dry Goods gt 2 我需要使用inject我想 但我真的一直在挣扎 我想要一个新的哈希值来反映前一个哈希值的重复键
  • 如何使用 PHP 解码以“\u”开头的内容

    如何使用 PHP 解码以 u 开头的内容 e g u4f60 u5df2 u7ecf u6dfb u52a0 u4e86 u6b64 u8bdd u9898 谢谢 对于 PHP 5 4 intl s u4f60 u5df2 u7ecf u6
  • 如何使用 PHP DOMDocument::saveHTML() 阻止 html 实体?

    由于自定义存储需求 为什么 在这里并不重要 谢谢 我必须保存 html a 特定格式的链接 例如 myDOMNode gt setAttribute href 123456 一切正常 直到我打电话saveHTML 在包含的 DOMDocum