pythonでhtmlの文字参照をなんとかする。
htmlの文字参照ってやつ。めんどいよね。 面倒さのあまりlt、gt、nbsp、あとampあたりだけreplace掛けて良しとしちゃってたりしたんだけどさ。 標準ライブラリのリファレンス見てたら、htmlentitydefsなんて使えそうなものがある。
という訳で使ってみた。 あんま短いコードにならなかった。 がっかり。
import htmlentitydefs # python3.xならhtml.entities
import re
def unescape(string):
for x in re.findall('&[a-zA-Z]+?;', string):
try:
rep = htmlentitydefs.name2codepoint[x[1:-1]]
except KeyError:
pass
else:
rep = unichr(rep) # python3.xなら普通にchr(rep)でおっけー。
string = string.replace(x, rep)
return string
print unescape('test string')
print unescape('<tag in <tag>>')
print unescape('dummy&tag;')
もっと短く書く方法あったら教えてくらはい。
あ、そうそう。 nbspの結果がなんか不思議なことになるので注意。 ノーブレークスペースってやつで、普通のスペースとは違うみたいね。詳しくはwikipediaでもどうぞ。 これになっちゃうと困る場合は、個別にreplaceでもしてください。
string = string.replace(' ', ' ')
みたいな感じで済むから、まあそんな労力にはならんでしょ。