2014-12-29 161 views
-3

正确关闭长时间的调试后,我发现我的问题的原因,我的代码看起来像这样HTML标签不循环

<a><div> 

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

</div></a> 

,但它产生奇怪的DOM。

我的调试fount $ item_content包含未关闭的标签,这就是为什么我的dom搞砸了。我用htmlspecialchars($item_content),它工作正常。但我仍然想要显示HTML,我应该如何继续?

+2

你应该会得到一个语法错误。你的PHP脚本甚至不应该运行。你确定你把它正确地复制了吗? – Barmar

+0

@Barmar http://stackoverflow.com/questions/27687141/wired-html-dom-produced-by-php –

+0

我不明白。这个问题与这个有什么关系? – Barmar

回答

0

使用方法如下

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

不工作..... –

+0

奇怪。你得到哪个输出? –

0

您可以不喜欢它

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

或者你可以像

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

就试试这个:

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

您提供的代码不会给出您描述的效果(因为段落标记会因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;