Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php HTML标记在循环中未正确关闭_Php_Html - Fatal编程技术网

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;