在使用 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 的相关文章

  • 当数据验证失败时保留表单字段中的值

    我在弄清楚验证失败时如何保留用户数据时遇到问题 我对 PHP 有点陌生 所以我的逻辑可能会犯一些巨大的错误 目前 如果验证失败 所有字段都会被清除 并且 Post 数据也会消失 这是一些代码 假设用户输入无效电子邮件 我希望保留 名称 字段
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • 在 System.Xml.XPath 中启用 XPath2 查询(XPathException:无效令牌)

    Microsoft 的 System Xml XPath nuget package 可用于 NET 4 6 声称支持 XPath 1 0 和 2 0 德文档 https msdn microsoft com en us library s
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • PHP 会话不适用于游戏

    我正在尝试模仿一款名为 SKUNK 用骰子玩 的游戏来完成一项作业 我无法让会话正常工作 这是我第一次使用 PHP 我还被告知无需会议即可完成 这是我的代码
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • 从 smarty 访问 PHP 文件的变量(本地或全局)

    我有一个 php 文件 其中包含一些本地和全局变量 例如 foo 从此文件中调用 smarty 对象 如何在不更改 PHP 文件的情况下从 smarty 脚本访问 foo Thanks 如果你有一个名为 BASE 的常量变量 并且定义如下
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 为什么 iconv 在 php:7.4-fpm-alpine docker 中返回空字符串

    给出以下代码
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 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 中加载文件时也会收到很多警告