[解決済み] Python/Djangoを使用してHTMLデコード/エンコードを行うにはどうすればよいですか?
質問
HTMLエンコードされた文字列があります。
'''<img class="size-medium wp-image-113"\
style="margin-left: 15px;" title="su1"\
src="http://blah.org/wp-content/uploads/2008/10/su1-300x194.jpg"\
alt="" width="300" height="194" />'''
に変えたいんです。
<img class="size-medium wp-image-113" style="margin-left: 15px;"
title="su1" src="http://blah.org/wp-content/uploads/2008/10/su1-300x194.jpg"
alt="" width="300" height="194" />
これをHTMLとして登録し、ブラウザでテキストとして表示されるのではなく、画像としてレンダリングされるようにしたいのです。
というウェブスクレイピングツールを使っているので、このような文字列が保存されています。
BeautifulSoup
これはウェブページをスキャンして特定のコンテンツを取得し、この形式の文字列を返します。
で行う方法を見つけました。 C# にはない。 Python . 誰か助けてくれませんか?
関連
どのように解決するのですか?
Django のユースケースを考えると、これには2つの答えがあります。 以下はその
django.utils.html.escape
関数があります。
def escape(html):
"""Returns the given HTML with ampersands, quotes and carets encoded."""
return mark_safe(force_unicode(html).replace('&', '&').replace('<', '&l
t;').replace('>', '>').replace('"', '"').replace("'", '''))
これを逆手に取ると、Jakeの回答にあるCheetah関数が動作するはずですが、シングルクオートが抜けています。 このバージョンでは、対称性の問題を避けるために置換の順序を逆にした、更新されたタプルを含んでいます。
def html_decode(s):
"""
Returns the ASCII decoded version of the given HTML string. This does
NOT remove normal HTML tags like <p>.
"""
htmlCodes = (
("'", '''),
('"', '"'),
('>', '>'),
('<', '<'),
('&', '&')
)
for code in htmlCodes:
s = s.replace(code[1], code[0])
return s
unescaped = html_decode(my_string)
しかし、これは一般的な解決策ではありません。
django.utils.html.escape
. より一般的には、標準ライブラリにこだわるのがよいでしょう。
# Python 2.x:
import HTMLParser
html_parser = HTMLParser.HTMLParser()
unescaped = html_parser.unescape(my_string)
# Python 3.x:
import html.parser
html_parser = html.parser.HTMLParser()
unescaped = html_parser.unescape(my_string)
# >= Python 3.5:
from html import unescape
unescaped = unescape(my_string)
提案として、HTMLをエスケープせずにデータベースに保存する方がより理にかなっているかもしれません。 可能であれば、BeautifulSoupからエスケープされていない結果を取得し、このプロセスを完全に回避することを検討する価値があるでしょう。
Django では、エスケープはテンプレートのレンダリング中にしか行われません。したがって、エスケープを防ぐには、テンプレートエンジンに文字列をエスケープしないよう指示すればよいのです。 そのためには、テンプレートでこれらのオプションの一つを使います。
{{ context_var|safe }}
{% autoescape off %}
{{ context_var }}
{% endautoescape %}
関連
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】Pythonのvirtualenvを離脱/終了/無効化する方法
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
Pythonコンテナのための組み込み汎用関数操作
-
Python関数の高度な応用を解説
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] Python 3.1 で文字列中の HTML エンティティをアンエスケープするにはどうしたらいいですか?[重複しています]。