HTML标记在循环中没有正确关闭

时间:2014-12-29 10:16:57

标签: php html

经过长时间的调试后,我找到了问题的原因,我的代码看起来像这样

<a><div>

<?php <p> echo $item_content </p> ?>

</div></a>

但它产生了奇怪的DOM。

我的调试fount $ item_content包含未关闭的标签,这就是为什么我的dom搞砸了。我使用了htmlspecialchars($item_content),它运行正常。但我仍然想显示HTML,我该怎么办?

4 个答案:

答案 0 :(得分:0)

使用如下

<a>
    <div>
        <p><?php echo $item_content;?></p>
    </div>
</a>

答案 1 :(得分:0)

你可以像

那样做
<a>
    <div>
        <?php echo "<p>".$item_content."</p>"; ?>
    </div>
</a>

或者你可以这样做

<a>
    <div>
        <p><?php echo $item_content;?></p>
    </div>
</a>

答案 2 :(得分:0)

  

试试这个:

 <a><div>
 <?php 
  echo "<p>".$item_content."</p>";
 ?>
 </div></a>

答案 3 :(得分:0)

您提供的代码不会产生您描述的效果(因为段落标记会抛出错误,因为它们是HTML而不是PHP)。假设在您的测试用例中只是一个错误(当您减少测试用例时,请确保它实际上反映了您遇到的问题!)并按照您对问题的描述进行操作:

如果变量中包含无效的HTML,那么在将其回显到DOM中之前需要先修复它。

执行此操作的最佳方法是转到源并在那里修复它。如果你不能这样做,那么你可以尝试在运行时通过将代码解析为DOM然后将其序列化回HTML来尝试。

<?php

$invalid = "<div>Testing";
$valid = "";

$dom = new DOMDocument();
$success = $dom->loadHTML($invalid);
foreach ($dom->getElementsByTagName("body")->item(0)->childNodes as $node) {
    $valid .= $dom->saveHTML($node);
}

echo $valid;