2014-07-09 36 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>