在使用 DOMDocument 函数处理之前修复 PHP 中格式错误的 XML

2023-12-12

我需要将来自外部源的 XML 文档加载到 PHP 中。 XML 没有声明它的编码并且包含非法字符,例如&。如果我尝试直接在浏览器中加载 XML 文档,我会收到类似“在文本内容中发现无效字符”的错误,并且在 PHP 中加载文件时也会收到很多警告,例如:xmlParseEntityRef: no name in Entity and Input is not proper UTF-8, indicate encoding ! Bytes: 0x9C 0x31 0x21 0x3C.

很明显,XML 的格式不正确,并且包含应转换为 XML 实体的非法字符。

这是因为 XML 提要由许多其他用户提供的数据组成,并且显然在我获取它之前没有对其进行验证或重新格式化。

我已经与 XML 提要的供应商交谈过,他们说他们正在尝试让内容提供商对其进行整理,但这似乎很愚蠢,因为他们应该首先验证输入。

我基本上需要修复 XML,纠正任何编码错误并将任何非法字符转换为 XML 实体,以便在使用 PHP 的 DOMDocument 函数时出现 XML 加载问题。

我的代码目前如下所示:

  $feedURL = '3704017_14022010_050004.xml';
  $dom = new DOMDocument();
  $dom->load($feedURL);

显示编码问题的示例 XML 文件(点击下载):feed.xml

包含尚未转换为 XML 实体的字符的 XML 示例:

<?xml version="1.0"?>
<feed>
<RECORD>
<ID>117387</ID>
<ADVERTISERNAME>Test</ADVERTISERNAME>
<AID>10544740</AID>
<NAME>This & This</NAME>
<DESCRIPTION>For one day only this is > than this.</DESCRIPTION>
</RECORD>
</feed>

要解决此问题,请设置DomDocument 恢复属性 to TRUE加载 XML 文档之前

$dom->recover = TRUE;

试试这个代码:

$feedURL = '3704017_14022010_050004.xml';
$dom = new DOMDocument();
$dom->recover = TRUE;
$dom->load($feedURL);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在使用 DOMDocument 函数处理之前修复 PHP 中格式错误的 XML 的相关文章

  • 在 CentOS 中安装 PHP Zip 扩展

    我正在尝试在 CentOS 中安装 PHP Zip 扩展 我的服务器没有外部互联网访问权限 所以我自己从 PECL 下载了它 http pecl php net package zip http pecl php net package z
  • 将 C# 中的 asmx web 服务的 Soap 请求标头从 text/xml 更改为soap/xml

    我需要调用网络服务 我生成了一个代理并调用了该方法 但它一直失败 因为 API 期望标头中包含soap xml 而 Visual Studio 中生成的代理客户端则在标头中发送文本 xml 问题 是否可以更改生成的代理客户端的 Conten
  • 如何将对象(模型类型对象)插入到 Laravel 中 Collection 对象的特定索引号处?

    我读过戴尔 里斯的代码明亮 https daylerees com codebright 了解更多关于雄辩的信息Collection在 Laravel 中使用 还做了一些其他研究 但找不到我正在寻找的答案 我想插入一个对象 Model输入对
  • 使用 PHP 创建、编辑和删除 crontab 作业?

    是否可以使用 PHP 创建 编辑和删除 crontab 作业 我知道如何列出 Apache 用户当前的 crontab 作业 output shell exec crontab l echo output 但是如何使用 PHP 添加 cro
  • 项目链接在 Wamp 服务器上不起作用

    我正在另一台计算机上安装 Wamp 服务器来运行中型数据库和 UI 我已成功阻止 IIS 并将服务器路由到 Localhost 8080 但是每当我尝试从 localhost 主页访问我的项目时 在 www 文件中 我被重定向到页面未找到错
  • 如何使用 Google Calendar API 和官方 PHP 库创建全天活动?

    我有这个代码 event new Event event gt setSummary event summary event gt setLocation event location start new EventDateTime sta
  • FPM 与 apache2 无法工作(权限被拒绝)

    我正在尝试使用 apache fastcgi 和 fpm 设置一个 Debian Web 服务器 但我越来越恼火 一旦我停用 mod php 我就会收到以下错误 2014 年 5 月 22 日星期四 12 16 10 错误 客户端 xxx
  • Golang 结构的 XML 和 JSON 标签?

    我有一个可以根据 HTTP 请求标头输出为 JSON 或 XML 的应用程序 我可以通过将正确的标签添加到我正在使用的结构中来实现正确的输出 但我不知道如何为 JSON 和 XML 指定标签 例如 序列化以纠正 XML type Foo s
  • php 包含打印 1

    我编写了以下代码 当我将 include 函数与旨在输出到页面的函数 例如 或 echo include foo php 结合使用时 它会返回包含内容 但在已包含的内容后面带有 1 echo include foo php 应该 inclu
  • 从 PHP 启动守护进程

    对于网站 我需要能够启动和停止守护进程 我目前正在做的是 exec sudo etc init d daemonToStart start 守护进程已启动 但 Apache PHP 挂起 做一个ps aux透露sudo它本身变成了僵尸进程
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • 删除 XML 中的指定标签 (notepad++)

    我的 GPS 轨迹有一个 非常 大的 XML 文件 它是这样构建的
  • 如何将路径添加到 Apache PATH 变量?

    我在 apache2 的 custom conf 文件中设置了以下内容 SetEnv PATH PATH opt local lib mysql5 bin this is a test 但是它不起作用 当我打电话时 hey shell ex
  • 如何验证上传的文件是视频?

    我的服务器上有一些非常敏感的信息 因此安全性是一个大问题 用户需要能够上传视频 我知道允许用户上传文件会带来安全威胁 因为没有 100 的方法可以阻止他们上传非视频 但我显然可以选择服务器将保留哪些文件 我知道检查文件扩展名是不够的 检查
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • Sublime Text 编辑器中的 PHP 语法检查

    在Gedit中 我可以在当前文档上添加 php l 外部工具 如果我安装了PHP命令行 它将对文档进行语法检查 有没有办法用 Sublime Text 编辑器来做到这一点 注意 我有一台 Mac 并且安装了 PHP CLI 我想我必须将代码
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • 如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大多数托管提供商仅具有 FTP 访问权限 是否可以 常见地进行 symfony 项目 3 x 或 4 x 的本地安装 然后通过 FTP 上
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types

随机推荐

  • Android 运行时和空点异常

    我在一个名为 ParseInitialization java 的类中进行了 Parse 初始化 该类扩展了 Application 并且在运行我的应用程序 MainActivity java 时 我得到了 RuntimeException
  • IMAP 空闲如何工作?

    有人可以向我解释一下 IMAP IDLE 是如何工作的吗 它是否会为它打开的每个连接创建一个新进程 我可以以某种方式使用 eventmachine 吗 我正在尝试通过后台工作人员在 Heroku 上的 ruby 中实现它 有什么想法吗 在
  • 如何使用 Wix 工具集在重大升级期间显式删除 dll

    我们正在尝试为我们的产品部署更新 其中包含更新的 dll 该 dll 也有一个版本号 因此通常安装程序应该能够看到它并替换旧的 dll Windows 安装程序在检查版本号时只关心前三个数字 然而 在这种情况下 更新后的版本号看起来与第四个
  • 类型错误:“长”对象不可迭代

    我刚刚用 python 创建了一本字典 stb info self stb type print type stb info The output gives me dict 当我想为每个组运行我的踩踏功能时 for group no sh
  • 单个查询中的多个 select 语句

    我正在 php mysql 中生成报告 ex select count id as tot user from user table select count id as tot cat from cat table select coun
  • 元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引

    在 React 项目中尝试 TypeScript 时 我遇到了这个错误 Element implicitly has an any type because expression of type string can t be used t
  • 在 PHP 中验证英国电话号码

    我购买了联系表 很棒的小事情 但我需要转换电话号码的验证以允许英国号码格式 换句话说 允许空格 现在它的验证不带空格 最小长度为 8 个字符 if is numeric phone if phone strlen phone lt 8 er
  • Java 中简单文件(行计数)函数的 API

    你好 给定一个任意文件 java 我想计算行数 这很简单 例如 使用 Apache 的 FileUtils readLines 方法 然而 对于大文件 就地读取整个文件是可笑的 即仅计算行数 一种自行开发的选项 创建 BufferedRea
  • 来自 2D 数组的 C++ 16 位灰度梯度图像

    我目前正在尝试构建 16 位灰度 渐变 图像 但我的输出看起来很奇怪 所以我显然没有正确理解这一点 我希望有人能就我的问题提供一些知识 我认为我写的 位图 是错误的 但我不确定 include CImg h using namespace
  • Windows Azure 是否具有与 AWS Identity Access Management 相当的功能?

    因此 我有一个使用 AWS 的 IAM 基础设施的移动应用程序 它可以有效地允许我向匿名移动设备提供临时访问令牌 以便它们可以直接从移动设备对 AWS 服务运行查询 有谁知道 Windows Azure 是否也有此类东西的替代品 我读过有关
  • Android HttpResponse响应代码[重复]

    这个问题在这里已经有答案了 我正在尝试获取 HttpResponse 的响应代码 没有直接获取响应代码的方法 HttpResponse getStatusLine getStatusCode 就是您正在寻找的
  • “background-attachment:fixed”的解决方法在 iOS4 中不起作用

    我正在努力获取具有固定背景图像的网页 因此当页面在 UIWebView 中滚动时图像不会移动 我发现的是 background attachment fixed不适用于 iOS4 使用 4 2 1 为了仔细检查 我已经准备了一个页面 其中包
  • setTimeOut 参数传递

    在 JavaScript 中我想使用setTimeOut 像这样的功能 最好的方法是通过匿名function设置超时 这个匿名函数将能够访问id setTimeout function showGrid id 5000 将字符串传递给set
  • 使用 Objective-C 执行 PHP 脚本

    我正在尝试执行一个 PHP 脚本来增加数据库中的字段 我的脚本正在运行 并且我目前正在使用 ASIHTTPRequest 完美地修改数据库 但我觉得我应该使用不同的方法 因为我不需要返回 这就是所谓的 HTTP POST 吗 increme
  • 批处理文件:迭代自给定日期以来修改的文件

    我想创建一个批处理文件 该文件对与某个日期以来修改的通配符 例如 jpg 匹配的每个文件执行命令 作为一个简单的示例 删除文件 尽管我的命令是自定义 不同的 2010 年 1 月 1 日或之后 该日期可以硬编码在批处理文件中 也可以作为命令
  • 使用 Ajax 实时更改数据库

    我正在建立一个网站 将其Mysql数据库中的内容打印到页面上以供用户查看 数据库的内容将不断添加 我想在页面上实时显示这些更改 而无需用户重新加载 我现在正在使用 PHP 将数据库的内容回显到页面 效果很好 只是要看到任何新的更改 必须重新
  • HTML 通过一个复选框提交多个值?

    您好 我有一个表单 允许用户检查任意数量的选项 然后点击提交 有没有办法让输入类型 复选框 提交多个值 例如现在我有
  • 标记为通过的长时间运行单元测试失败 TFS 构建 - 对象“xxx.rem”已断开连接或服务器上不存在。**

    我想利用 TFS 和 MSTest 进行回归测试 我有一些长时间运行的单元测试 10分钟以上 单元测试可以在 VS2017 内的开发人员机器上本地成功运行 TFS2017 上显示单元测试已通过 然而 构建被标记为失败 对我来说 这个问题看起
  • 是否可以阻止“powershell”以 ANSI 序列包装输出?

    I CreateProcess win32 powershell并从中读取原始字节 我发现它产生了很多看不见的字符 例如 u 1b 2J u 1b m u 1b 有什么办法可以阻止它吗 确实可以手动剥离它们 但我确实希望有其他方法 你提到p
  • 在使用 DOMDocument 函数处理之前修复 PHP 中格式错误的 XML

    我需要将来自外部源的 XML 文档加载到 PHP 中 XML 没有声明它的编码并且包含非法字符 例如 如果我尝试直接在浏览器中加载 XML 文档 我会收到类似 在文本内容中发现无效字符 的错误 并且在 PHP 中加载文件时也会收到很多警告