正確關閉長時間的調試後,我發現我的問題的原因,我的代碼看起來像這樣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