2014-12-29 153 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;