2014-07-09 35 views
0

正如標題所示 - 我有一種情況,我正在迭代一系列解碼的html(嘗試使用htmlspecialcharacters_decode()和html_entities_decode)。但是,解碼後的字符串被DOM視爲textNode。 PHP 28年3月5日htmlspecialcharacters_decode/html_entities_decode - 結果不被解釋爲HTML

樣本:

<div> 
     <h1>This is in the middle of a template file</h1> 
     <?php 
      foreach ($assocArrayObjEle as $obyKey => $obyMeat) { 
       if (!is_null($obyMeat->description) && strlen($obyMeat->description)> 0) 
       { 
       print html_entity_decode($obyMeat->description); 
       } 
       } 
     ?> 
    </div> 

結果回來爲這樣:

這是一個模板文件

< p的中間>這是HTML,括號不作爲實體序列轉義 - 但是這個文本體被視爲HTML文本節點。這似乎不是每個手冊條目的預期結果,以及我已經找到的主題的閱讀結果。所有實體都被正確處理,但結果只是簡單地將其作爲DOM中的textNode撤回,而不是DOM元素。提前致謝</p >

作爲示例輸出狀態 - 實體確實被重新分解爲有效的標記,但它們被附加到DOM(或者DOM決定這一點?),這是包含元素的textNode - 而不是DOMElement集合。在此先感謝

回答

0

好吧,無論出於何種原因,htmlspecialchars_decode()的一次傳遞未完成。這是非常奇怪的,因爲&lt;否則需要顯示爲&amp;lt;以使其成爲必需 - 無論如何,如果其他人需要,可以將其留在此處。解決方案看起來像:

<div> 
     <h1>This is in the middle of a template file</h1> 
     <?php 
      foreach ($assocArrayObjEle as $obyKey => $obyMeat) { 
       if (!is_null($obyMeat->description) && strlen($obyMeat->description)> 0) 
       { 
        echo htmlspecialchars_decode(htmlspecialchars_decode($obyMeat->description, ENT_QUOTES), ENT_NOQUOTES); //2nd pass was necessary even tho there were no double escaped entites (amperstands not being double escaped). 
       } 
       } 
     ?> 
    </div>