J'essaie de gratter cette page: http://www.udel.edu/dining/menus/russell.html. J'ai écrit un grattoir dans Ruby en utilisant la bibliothèque Hpricot. problèmeRuby grattoir HTML écrit en Hpricot ayant des problèmes avec HTML échappé
: page HTML est échappé et je dois afficher unescape
example: "M&M" should be "M&M"
example: "Entrée" should be "Vegetarian Entrée"
J'ai essayé d'utiliser la bibliothèque de CGI en Ruby (pas trop de succès) et la pierre précieuse HtmlEntities que j'ai trouvé par this Stack après débordement .
HtmlEntities travaux au cours des essais:
require 'rubygems'
require 'htmlentities'
require 'cgi'
h = HTMLEntities.new
puts "h.decode('Entrée') = #{h.decode("Entrée")}"
blank = " "
puts "h.decode blank = #{h.decode blank}"
puts "CGI.unescapeHTML blank = |#{CGI.unescapeHTML blank}|"
puts "h.decode '<th width=86 height=59 scope=row>Vegetarian Entrée</th> ' = |#{h.decode '<th width=86 height=59 scope=row>Vegetarian Entrée</th> '}|"
cède correctement
h.decode('Entrée') = Entrée
h.decode blank =
CGI.unescapeHTML blank = | |
h.decode '<th width=86 height=59 scope=row>Vegetarian Entrée</th> ' = |<th width=86 height=59 scope=row>Vegetarian Entrée</th> |
Cependant, quand je vais l'utiliser sur un fichier avec open-uri il ne fonctionne pas correctement:
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'htmlentities'
require 'cgi'
f = open("http://www.udel.edu/dining/menus/russell.html")
htmlentity = HTMLEntities.new
while line = f.gets
puts htmlentity.decode line
end
Donne de manière incorrecte des choses comme:
<th width="60" height="59" scope="row">Vegetarian Entrée</th>
et
<th scope="row">Â </th> // note: was originally ' ' to indicate a blank
mais gère correctement M & M en cédant:
<td valign="middle" class="menulineA">M&M Brownies</td>
Suis-je le code HTML traiter incorrectement une échappée? Je ne comprends pas pourquoi cela fonctionne dans certains cas et pas dans d'autres.
Je courais ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
Toute aide/suggestion est appréciée. Merci.
Vous aviez parfaitement raison concernant le problème d'encodage. J'ai finalement réalisé que les problèmes surgissent quand j'ouvre le fichier dans xemacs, mais les problèmes n'apparaissent pas quand je fais simplement une commande 'more' sur le fichier et l'imprime dans le terminal. Je suppose que xemacs n'est tout simplement pas configuré pour lire le fichier UTF8, car lorsque je suis passé à gedit pour les coups de pied, les problèmes ne se posaient pas non plus. Merci! – conorgil
Je n'utilise pas de xemacs mais je pense qu'une version relativement récente serait au courant d'utf-8. Pour info dans emacs la commande que j'utiliserais s'appellerait revert-buffer-with-coding-system avec le raccourci clavier 'ctrl + x r utf-8' –
user336851