2011-03-19 81 views
4

我使用xml,xsl提取了所需片段的intrecept服務器響應,從客戶端請求中的服務器響應中提取html片段。例如,假設在處理它之前,$ content有服務器響應。Warning:DOMDocument :: loadXML()[function.DOMDocument-loadXML]:實體'laquo'實體中未定義

$dom = new domDocument(); 
    $dom->loadXML($content); 
    $xslProgram = <<<xslProgram 
<xsl:stylesheet version='1.0' 
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 

<xsl:output method="html" encoding='UTF-8' indent="yes" /> 

<xsl:template match="/"> 
    <xsl:copy-of select="$select" /> 
</xsl:template> 

</xsl:stylesheet> 
xslProgram; 

    $domXsl = new domDocument(); 
    $domXsl->loadXML($xslProgram); 
    $xsl = new XSLTProcessor(); 
    $xsl->importStylesheet($domXsl); 

    $content = $xsl->transformToXml($dom); 

看起來一切工作正確的,但是當它檢測到& NBSP,& LAQUO,& RAQUO等,有消息顯示:「警告:DOM文檔:: loadXML的()[function.DOMDocument-的loadXML ]:實體'laquo'未在實體中定義「

起初我只是用它們的unicode等價體(str_replace)替換了所有這些元素(& nbsp和其他),但是我明白我不能考慮所有這些變體。我怎麼解決這個問題?

讓我知道如果你不打擾我,我可以寫更好的解釋。

謝謝艾哈邁德。

回答

6

HTML實體沒有在XML中定義,這就是爲什麼你會得到這些錯誤。您是否考慮使用loadHTML()作爲輸入文檔而不是loadXML()

$dom = new domDocument(); 
$dom->loadHTML($content); 

http://php.net/manual/en/domdocument.loadhtml.php

+0

太棒了!非常感謝你! – Ahmed 2011-03-19 11:51:06

+0

+1正確答案。 – 2011-03-19 15:16:49

2

我認爲如果您先通過html_entity_decode通過$內容,您的問題將消失。

+0

這應該是正確的答案。有時你必須使用loadXML()並通過html_entity_decode傳遞$ content來解決我的問題。 – Zerubbabel 2018-03-10 21:28:19