2010-11-18 5 views
3

Daten im HTML-Format präsentiert und an den Server, der einige Vorverarbeitung.Problem mit nicht geschlossenen img-Tag

Es arbeitet mit "src" Attribut von "img" -Tag.

Nach der Vorverarbeitung und Speicherung sind alle vorverarbeiteten "img" -Tags nicht selbst abgeschlossen.

So wurde zum Beispiel, wenn "img" -Tag Folgendes:

<img src="image.png" /> 

nach mit Nokogiri oder Hpricot Vorverarbeitung, wird es sein:

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

Der Code ist ziemlich einfach:

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

Für Nokorigi sieht es gleich aus.

Wie wird das Problem gelöst?


Update 1

vergessen zu erwähnen - ich HTML 5-Seite haben, die ich mit W3C Validator zu validieren bin versucht.

Wenn "img" Tag innerhalb eines div ist, es Beschwerden über folgende:

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

Zum Beispiel versuchen, folgenden Code zu überprüfen:

<!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> 

Sie erhalten die gleiche Fehlermeldung erhalten:

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

Antwort

3

Ich denke, das Problem ist mit Ihrem <html>, wo es das Xmlns-Attribut als XHTML delcares. Dies scheint der Tatsache widersprüchlich zu sein, dass es kein XHTML-Dokument ist. Wenn Sie dieses xmlns-Attribut entfernen, sollte es gültig sein.

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

Oh, Danke! Ich habe diesen Namensraum völlig vergessen. Es war nach dem Kopieren-Einfügen, das vor vielen Monaten gemacht wurde. – AntonAL

0

In der Vorverarbeitungsfunktion, an die Sie delegieren, haben Sie nicht die Kontrolle über jedes IMG-Tag? Können Sie nicht zurückgeben, was bereits zurückgegeben wurde, und ein explizites Close-Tag anhängen?

+0

Sicher, ich kann alles mit der Hand analysieren, mit ausgefeilten regulären Ausdrücken usw. Aber diese Aufgabe bis zu Bibliothek sein muss, ich bin mit – AntonAL

2

Das Problem besteht darin, dass Ihre Bibliotheken korrektes HTML generieren und das abschließende "/" in HTML nicht korrekt ist. Sofern Sie nicht die Anwendung/xhtml + xml bereitstellen, ist es sinnlos, sie dort zu haben - das IMG-Tag ist in allen HTML-Versionen selbständig und das "/" ist bedeutungslos. Wenn Sie sind Anwendung/xhtml + xml, ich denke, Sie müssen Nokogiris to_xhtml explizit verwenden.

+0

siehe Update 1 in meiner Frage – AntonAL

+0

@AntonAL: So sind Sie dienen XHTML statt HTML. Wie gesagt, in diesem Fall müssen Sie XHTML anstelle von HTML generieren. Oder benutze HTML. Sie müssen nur einen auswählen und dabei bleiben. – Chuck

Verwandte Themen