经过长时间的调试后,我找到了问题的原因,我的代码看起来像这样
<a><div>
<?php <p> echo $item_content </p> ?>
</div></a>
但它产生了奇怪的DOM。
我的调试fount $ item_content包含未关闭的标签,这就是为什么我的dom搞砸了。我使用了htmlspecialchars($item_content)
,它运行正常。但我仍然想显示HTML,我该怎么办?
答案 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;