SORU
8 Kasım 2008, CUMARTESİ


Nasıl HTML kod çözme/kodlama kullanarak Python/Django yapabilirim?

Html olarak kodlanmış bir dize var:

<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" />

Bunu değiştirmek istiyorum:

<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" />

Tarayıcı tarafından görüntü olarak işlenmiş yerine metin olarak görüntülenen bu HTML olarak kayıt etmek istiyorum.

C bunu nasıl buldum# ama Python değil. Biri bana yardım edebilir mi?

Teşekkürler.

Edit: Biri benim dizeleri gibi. saklanır neden sordu "Tarama" bir web sayfası ve belirli içerik alır. web-kazıma aracı kullanıyorum çünkü. Aracı (BeautifulSoup) biçiminde dize döndürür.

İlgili

CEVAP
8 Kasım 2008, CUMARTESİ


Django kullanma durumu göz önüne alındığında, bu iki yanıtı var. Burada referans için: django.utils.html.escape fonksiyonu

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("'", '''))

Bu tersine çevirmek için, Çita işlevi Jake'in yanıt olarak tanımlanan çalışması gerekir, ama tek tırnak eksik. Bu sürüm güncelleştirilmiş bir demet, yedek sırasını simetrik sorunları önlemek için ters içerir:

def html_decode(s):
    """
    Returns the ASCII decoded version of the given HTML string. This does
    NOT remove normal HTML tags like <p>.
    """
    for code in htmlCodes = (
            ("'", '''),
            ('"', '"'),
            ('>', '>'),
            ('<', '<'),
            ('&', '&')
        ):
        s = s.replace(code[1], code[0])
    return s

unescaped = html_decode(my_string)

Bu, ancak, genel bir çözüm değildir; sadece dizeleri django.utils.html.escape ile kodlanmış için uygundur. Daha genel olarak, standart kütüphane ile sopa için iyi bir fikirdir:

# 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)

Bir öneri olarak: HTML veritabanınızda çıkmamış depolamak için daha mantıklı olabilir. Mümkünse BeautifulSoup geri çıkmamış sonuçlar elde, ve bu süreç kaçınarak bakarak değer tamamen olurdu.

Django ile, tek kaçış şablon oluşturma sırasında oluşur; kaçmasını önlemek için sadece şablon motoru dize kaçmak için değil söyle. Bunu yapmak için, bir şablon olarak aşağıdaki seçeneklerden birini kullanın:

{{ context_var|safe }}
{% autoescape off %}
    {{ context_var }}
{% endautoescape %}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Major FX

    Major FX

    6 HAZİRAN 2012
  • paikimchung

    paikimchung

    12 Mayıs 2006
  • TheXiaxue

    TheXiaxue

    3 AĞUSTOS 2009