Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Use unicode.translate to speed up js escaping.

  • Loading branch information...
commit 44767f2caf028d89e1a283d04bb552d0e18bb936 1 parent 40e62a5
@etianen etianen authored apollo13 committed
Showing with 15 additions and 18 deletions.
  1. +15 −18 django/utils/html.py
View
33 django/utils/html.py
@@ -42,29 +42,26 @@ def escape(text):
return mark_safe(force_text(text).replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'", '&#39;'))
escape = allow_lazy(escape, six.text_type)
-_base_js_escapes = (
- ('\\', '\\u005C'),
- ('\'', '\\u0027'),
- ('"', '\\u0022'),
- ('>', '\\u003E'),
- ('<', '\\u003C'),
- ('&', '\\u0026'),
- ('=', '\\u003D'),
- ('-', '\\u002D'),
- (';', '\\u003B'),
- ('\u2028', '\\u2028'),
- ('\u2029', '\\u2029')
-)
+_js_escapes = {
+ ord('\\'): '\\u005C',
+ ord('\''): '\\u0027',
+ ord('"'): '\\u0022',
+ ord('>'): '\\u003E',
+ ord('<'): '\\u003C',
+ ord('&'): '\\u0026',
+ ord('='): '\\u003D',
+ ord('-'): '\\u002D',
+ ord(';'): '\\u003B',
+ ord('\u2028'): '\\u2028',
+ ord('\u2029'): '\\u2029'
+}
# Escape every ASCII character with a value less than 32.
-_js_escapes = (_base_js_escapes +
- tuple([('%c' % z, '\\u%04X' % z) for z in range(32)]))
+_js_escapes.update((ord('%c' % z), '\\u%04X' % z) for z in range(32))
def escapejs(value):
"""Hex encodes characters for use in JavaScript strings."""
- for bad, good in _js_escapes:
- value = mark_safe(force_text(value).replace(bad, good))
- return value
+ return mark_safe(force_text(value).translate(_js_escapes))
escapejs = allow_lazy(escapejs, six.text_type)
def conditional_escape(text):
Please sign in to comment.
Something went wrong with that request. Please try again.