Php HTML标记在循环中未正确关闭
经过长时间的调试,我找到了问题的原因,我的代码如下Php HTML标记在循环中未正确关闭,php,html,Php,Html,经过长时间的调试,我找到了问题的原因,我的代码如下 <a><div> <?php <p> echo $item_content </p> ?> </div></a> 但它产生了奇怪的DOM 我调试的$item_内容包含unclosed标记,这就是我的dom出错的原因。我使用了htmlspecialchars$item_内容,效果很好。但是我仍然想显示HTML,我应该如何继续 使用方法如下 <a>
<a><div>
<?php <p> echo $item_content </p> ?>
</div></a>
但它产生了奇怪的DOM
我调试的$item_内容包含unclosed标记,这就是我的dom出错的原因。我使用了htmlspecialchars$item_内容,效果很好。但是我仍然想显示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>
试试这个:
您提供的代码不会产生您描述的效果,因为段落标记会抛出错误,因为它们是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;
你应该得到一个语法错误。你的PHP脚本甚至不应该运行。你确定你抄对了吗?@Barmar我不明白。这个问题跟这个有什么关系?奇怪。您得到的是哪种输出?
<?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;