Php 如何处理含有非法字符的XML
我从一家公司收到一个XML文件,其中包含此元素,URL作为值(由于包含未替换的符号,因此XML格式不正确): 但现在我收到一个错误: 警告:simplexml_load_string():实体:第28行:解析器 错误:EntityRef:应为“;”在 正如您已经猜到的,这发生在Php 如何处理含有非法字符的XML,php,xml,Php,Xml,我从一家公司收到一个XML文件,其中包含此元素,URL作为值(由于包含未替换的符号,因此XML格式不正确): 但现在我收到一个错误: 警告:simplexml_load_string():实体:第28行:解析器 错误:EntityRef:应为“;”在 正如您已经猜到的,这发生在&字符上 现在我有两个问题: 我能自己把这个&编码成& 作为公司中唯一的软件开发人员,如何处理这种情况。因为我向另一家公司的技术人员解释说,这不是有效的XML,他说的唯一一件事是,他不能更改他这边的XML,因为那样的
&
字符上
现在我有两个问题:
&
编码成&解析前在PHP中使用code>
$xmlFile = trim(file_get_contents('php://input'));
$xmlDataEncoded = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $xmlFile);
$xmlData = simplexml_load_string($xmlDataEncoded);
&
替换为&代码>,注意不要将其替换到已作为实体使用的位置。它丑陋、容易出错,应该是不必要的
“这是非常糟糕的。”-这使得它在定义上“不是XML”,XML是格式良好的。我特别喜欢你的批评者试图表达的第2个观点,即这样的修复很难看,容易出错,应该是不必要的。1不太有效,因为你必须担心其他实体(例如
)包括文档中可能定义的内容,尽管该方法背后的思想确实如此。最终,它可能需要regex来完全实现。您可能希望替换&
,除非它以类似&\w+的模式出现
@Matthew:是的,我应该注意不要在它已经存在的地方替换它&;谨慎更一般。我现在已经修好了。谢谢
$returnUrl = mysqli_real_escape_string($conn,$xmlData->Request->PunchOutSetupRequest->BrowserFormPost->URL);
$xmlFile = trim(file_get_contents('php://input'));
$xmlDataEncoded = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $xmlFile);
$xmlData = simplexml_load_string($xmlDataEncoded);