summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzio Melotti <ezio.melotti@gmail.com>2013-07-07 09:11:24 (GMT)
committerEzio Melotti <ezio.melotti@gmail.com>2013-07-07 09:11:24 (GMT)
commit4603487dc941f2e6de04664058689f21a2ff349f (patch)
tree7c2b70480473914ea303a94940dab94a5a2b0c9d
parent071029fac6c074c801d5dc292d250c77c189ea3f (diff)
downloadcpython-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__.py13
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
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('&'): '&amp;', ord('<'): '&lt;', ord('>'): '&gt;'}
-_escape_map_full = {ord('&'): '&amp;', ord('<'): '&lt;', ord('>'): '&gt;',
- ord('"'): '&quot;', ord('\''): '&#x27;'}
-
# 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("&", "&amp;") # Must be done first!
+ s = s.replace("<", "&lt;")
+ s = s.replace(">", "&gt;")
if quote:
- return s.translate(_escape_map_full)
- return s.translate(_escape_map)
+ s = s.replace('"', "&quot;")
+ s = s.replace('\'', "&#x27;")
+ return s
diff --git a/Misc/ACKS b/Misc/ACKS
index ba7222b..f0fefd5 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -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
diff --git a/Misc/NEWS b/Misc/NEWS
index c3fbcb9..13694f5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.