2010-11-18 13 views
3

のデータがHTML形式で表示され、サーバーに送信されると、いくつかの前処理が行われます。閉じられていないimgタグ

"img"タグの "src"属性で動作します。

前処理および保存後、前処理されたすべての「img」タグは自動で閉じられません。例えば

"IMG" タグには、次のいた場合、:

<img src="image.png" /> 

を鋸山や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

言及するのを忘れて - 私はW3C Validatorで検証しようとしているHTML 5のページを持っています。

"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としてdelcaresする。これは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

0

あなたが委任する前処理機能では、各imgタグを制御できませんか?すでに返ってきたものを返して、明示的な終了タグを追加することはできませんか?

+0

確かに、私は、など、洗練された正規表現を使用して、手ですべてを解析することができます。しかし、このタスクはライブラリーまででなければならない、私は – AntonAL

2

問題は、ライブラリが正しいHTMLを生成しており、末尾の "/"がHTMLで正しくないことです。 application/xhtml + xmlを提供しない限り、HTMLのすべてのバージョンでIMGタグが自動的に閉じられ、 "/"は無意味です。 がapplication/xhtml + xmlのである場合は、Nokogiriのto_xhtmlを明示的に使用する必要があると思います。

+0

を使用しています私の質問 – AntonAL

+0

@AntonALにアップデート1を参照してください。ですから、提供していますHTMLの代わりにXHTML。私が言ったように、その場合、HTMLの代わりにXHTMLを生成する必要があります。または、HTMLを使用します。あなたはただ一つを選んでそれに固執する必要があります。 – Chuck

関連する問題