從公司收到一個XML文件,其中包含此元素,其URL值爲(由於包含非轉義&符而導致XML格式不正確):如何處理具有非法字符的XML
<BrowserFormPost>
<URL>https://example.com/asdsad?type=1&id2</URL>
</BrowserFormPost>
他們不編碼&
爲&
,這使得它不是XML。 現在的問題:我讓他們正確地編碼URL,但不幸的是,他們不能。他們購買了ERP軟件,他們只能提供這些數據。
現在在我的PHP我解析這個XML簡單的XML:
$returnUrl = mysqli_real_escape_string($conn,$xmlData->Request->PunchOutSetupRequest->BrowserFormPost->URL);
,但現在我收到一個錯誤:
Warning: simplexml_load_string(): Entity: line 28: parser error : EntityRef: expecting ';' in
正如你已經猜到了,這發生在&
字符。
所以現在我有2個問題:
我可以自己解析之前編碼在PHP中,這
&
到&
。如何處理這種情況作爲公司中唯一的軟件開發人員。因爲我向其他公司的技術人員解釋這是不合法的XML,他說的唯一的事情就是他不能在他身邊更改XML,因爲那些也收到XML的公司現在不再工作了。我們公司希望這個項目能夠成功,因爲另一家公司對我們公司來說是一筆巨大的利潤。那麼如何處理來自其他公司的無效代碼呢?
UPDATE
我需要解決,因爲他們(其他公司)無法將其更改爲&的問題,所以我做了以下來解決這個問題:
$xmlFile = trim(file_get_contents('php://input'));
$xmlDataEncoded = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $xmlFile);
$xmlData = simplexml_load_string($xmlDataEncoded);
「這很糟糕。」 - 這使得它「不是XML」 – Quentin
根據定義,XML格式良好。 – Parfait