diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2013-07-07 09:11:24 (GMT) |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2013-07-07 09:11:24 (GMT) |
commit | 4603487dc941f2e6de04664058689f21a2ff349f (patch) | |
tree | 7c2b70480473914ea303a94940dab94a5a2b0c9d | |
parent | 071029fac6c074c801d5dc292d250c77c189ea3f (diff) | |
download | cpython-4603487dc941f2e6de04664058689f21a2ff349f.zip cpython-4603487dc941f2e6de04664058689f21a2ff349f.tar.gz cpython-4603487dc941f2e6de04664058689f21a2ff349f.tar.bz2 |
#18020: improve html.escape speed by an order of magnitude. Patch by Matt Bryant.
-rw-r--r-- | Lib/html/__init__.py | 13 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 10 insertions, 7 deletions
diff --git a/Lib/html/__init__.py b/Lib/html/__init__.py index 02652ef..2ad167f 100644 --- a/Lib/html/__init__.py +++ b/Lib/html/__init__.py @@ -2,11 +2,6 @@ General functions for HTML manipulation. """ - -_escape_map = {ord('&'): '&', ord('<'): '<', ord('>'): '>'} -_escape_map_full = {ord('&'): '&', ord('<'): '<', ord('>'): '>', - ord('"'): '"', ord('\''): '''} - # NB: this is a candidate for a bytes/string polymorphic interface def escape(s, quote=True): @@ -16,6 +11,10 @@ def escape(s, quote=True): characters, both double quote (") and single quote (') characters are also translated. """ + s = s.replace("&", "&") # Must be done first! + s = s.replace("<", "<") + s = s.replace(">", ">") if quote: - return s.translate(_escape_map_full) - return s.translate(_escape_map) + s = s.replace('"', """) + s = s.replace('\'', "'") + return s @@ -172,6 +172,7 @@ Dave Brueck Francisco Martín Brugué Ian Bruntlett Floris Bruynooghe +Matt Bryant Stan Bubrouski Erik de Bueger Jan-Hein Bührman @@ -142,6 +142,9 @@ Core and Builtins Library ------- +- Issue #18020: improve html.escape speed by an order of magnitude. + Patch by Matt Bryant. + - Issue #18347: ElementTree's html serializer now preserves the case of closing tags. |