Найти - Пользователи
Полная версия: Декодировать последовательности вида &
Начало » Network » Декодировать последовательности вида &
1 2
odnochlen
Сабж.
GaiveR
s = s.replace('&', '&')
=)

Если не только &amp, но и другие символы, то:
from html.parser import HTMLParser # python 3
from HTMLParser import HTMLParser # python 2
HTMLParser().unescape(s)
odnochlen
А какой смысл имеет обьект HTMLParser? unescape ведь не хранит состояние.
GaiveR
Потому что это не есть “правильный” способ декодировать строку. Это просто вспомогательный метод класса HTMLParser, который мы можем заюзать, если лень писать что-то своё.

Есть еще, например, xml.sax.saxutils.unescape, с реализацией в 5 строк.
odnochlen
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
py.user.next
>>> import html.entities
>>> html.entities.entitydefs['amp']
'&'
>>>

во втором то же самое через модуль htmlentitydefs
odnochlen
odnochlen
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
Ап
PooH
odnochlen
odnochlen
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
Ап
А он не задокументирован
In [2]: HTMLParser.unescape?
Type:       instancemethod
Base Class: <type 'instancemethod'>
String Form:<unbound method HTMLParser.unescape>
Namespace:  Interactive
File:       /usr/lib/python2.7/HTMLParser.py
Definition: HTMLParser.unescape(self, s)
Docstring:  <no docstring>
In [3]: %psource HTMLParser.unescape
    def unescape(self, s):
        if '&' not in s:
            return s
        def replaceEntities(s):
            s = s.groups()[0]
            try:
                if s[0] == "#":
                    s = s[1:]
                    if s[0] in ['x','X']:
                        c = int(s[1:], 16)
                    else:
                        c = int(s)
                    return unichr(c)
            except ValueError:
                return '&#'+s+';'
            else:
                # Cannot use name2codepoint directly, because HTMLParser supports apos,
                # which is not part of HTML 4
                import htmlentitydefs
                if HTMLParser.entitydefs is None:
                    entitydefs = HTMLParser.entitydefs = {'apos':u"'"}
                    for k, v in htmlentitydefs.name2codepoint.iteritems():
                        entitydefs[k] = unichr(v)
                try:
                    return self.entitydefs[s]
                except KeyError:
                    return '&'+s+';'
        return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
odnochlen
PooH
А он не задокументирован
Ой как классно

А нету документации вроде javadoc, куда попадают все функции, даже без комментариев?
PooH
odnochlen
А нету документации вроде javadoc, куда попадают все функции, даже без комментариев?
Есть, причем из коробки :)
pydoc -p 1234
смотрим на http://localhost:1234/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB