正确关闭长时间的调试后,我发现我的问题的原因,我的代码看起来像这样HTML标签不循环
<a><div>
<?php <p> echo $item_content </p> ?>
</div></a>
,但它产生奇怪的DOM。
我的调试fount $ item_content包含未关闭的标签,这就是为什么我的dom搞砸了。我用htmlspecialchars($item_content)
,它工作正常。但我仍然想要显示HTML,我应该如何继续?
正确关闭长时间的调试后,我发现我的问题的原因,我的代码看起来像这样HTML标签不循环
<a><div>
<?php <p> echo $item_content </p> ?>
</div></a>
,但它产生奇怪的DOM。
我的调试fount $ item_content包含未关闭的标签,这就是为什么我的dom搞砸了。我用htmlspecialchars($item_content)
,它工作正常。但我仍然想要显示HTML,我应该如何继续?
使用方法如下
<a>
<div>
<p><?php echo $item_content;?></p>
</div>
</a>
不工作..... –
奇怪。你得到哪个输出? –
您可以不喜欢它
<a>
<div>
<?php echo "<p>".$item_content."</p>"; ?>
</div>
</a>
或者你可以像
<a>
<div>
<p><?php echo $item_content;?></p>
</div>
</a>
就试试这个:
<a><div>
<?php
echo "<p>".$item_content."</p>";
?>
</div></a>
您提供的代码不会给出您描述的效果(因为段落标记会因HTML而不是PHP而引发错误)。假设这只是测试用例中的一个错误(当您制作缩小的测试用例时,请确保它实际上反映了您遇到的问题!)并按问题描述:
如果您在变量,那么你需要在将它回显到你的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;
你应该会得到一个语法错误。你的PHP脚本甚至不应该运行。你确定你把它正确地复制了吗? – Barmar
@Barmar http://stackoverflow.com/questions/27687141/wired-html-dom-produced-by-php –
我不明白。这个问题与这个有什么关系? – Barmar