2010-11-18 80 views
3

以HTML格式呈現並提交給服務器的數據,該數據會進行一些預處理。img標籤未封閉的問題

它使用「img」標籤的「src」屬性進行操作。

預處理和保存後,所有預處理的「img」標籤都不是自封閉的。

例如,如果 「IMG」 標籤是以下幾點:

<img src="image.png" /> 

與引入nokogiri或角度來說,Hpricot預處理後,這將是:

<img src="/preprocessed_path/image.png"> 

的代碼非常簡單:

doc = Hpricot(self.content) 
doc.search("img").each do |tag| 
    preprocess tag 
end 
self.content = doc.to_html 

對於Nokorigi,它看起來是一樣的。

如何解決此問題?


更新1

忘記提及 - 我有HTML 5頁,其中我試圖用W3C Validator驗證。

當 「IMG」 標籤是一個div裏面,它抱怨以下:

required character (found d) (expected i) 
</div> 

例如,試圖驗證下面的代碼:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="UTF-8" /> 
</head> 
<body> 
    <div> 
     <img src="image.png"> 
    </div> 
</body> 
</html> 

你會得到同樣的錯誤:

Line 9, Column 4: required character (found d) (expected i) 
</div> 

回答

3

我認爲問題出在您的<html>,它將xmlns屬性改爲XHTML。這似乎與它不是XHTML文檔的事實相矛盾。如果你刪除這個xmlns屬性,它應該是有效的。

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8" /> 
    <title>something here</title> 
</head> 
<body> 
    <div> 
    <img src="image.png"> 
    </div> 
</body> 
</html> 
+0

哦,謝謝!我完全忘了這個名字空間。它是在複製粘貼之後留下的,這是在幾個月前完成的。 – AntonAL 2010-11-19 02:52:53

0

在您正在委託的預處理函數中,您是否無法控制每個img標記?你能不能返回它已經返回的東西,並附加一個明確的關閉標籤?

+0

當然,我可以通過解析手中的一切,使用複雜的正則表達式等等。但是,這個任務一定要達到圖書館,我使用 – AntonAL 2010-11-19 00:29:23

2

問題是您的庫正在生成正確的HTML,並且HTML中尾部的「/」不正確。除非你提供application/xhtml + xml,否則根本沒有必要 - IMG標籤在所有版本的HTML中都是自動關閉的,「/」沒有意義。如果你服務應用程序/ xhtml + xml,我想你需要明確使用Nokogiri的to_xhtml

+0

看到更新1在我的問題 – AntonAL 2010-11-19 00:28:01

+0

@AntonAL:那麼,你是服務XHTML而不是HTML。就像我說的那樣,在這種情況下,您將需要生成XHTML而不是HTML。或者使用HTML。你只需要挑一個並堅持下去。 – Chuck 2010-11-19 02:06:56