Commits

Anonymous committed bf201da

[svn] Enhanced html_escape

Comments (0)

Files changed (2)

tests/test_escapes.py

+from webhelpers.escapes import *
+
+def test_html_escape():
+    assert html_escape('foo') == 'foo'
+    assert html_escape('<this"that>') == '&lt;this&quot;that&gt;'
+    assert html_escape(u'\u1000') == '&#4096;'
+    class X:
+        def __unicode__(self):
+            return u'<\u1000>'
+    assert html_escape(X()) == '&lt;&#4096;&gt;'
+    assert html_escape(1) == '1'

webhelpers/escapes.py

 
 import cgi
 
-def html_escape(string):
-    return cgi.escape(string, True)
+def html_escape(s):
+    """HTML-escape a string or object
+
+    This converts any non-string objects passed into it to strings
+    (actually, using ``unicode()``).  All values returned are
+    non-unicode strings (using ``&#num;`` entities for all non-ASCII
+    characters).
+    """
+    if not isinstance(s, basestring):
+        s = unicode(s)
+    s = cgi.escape(s, True)
+    if isinstance(s, unicode):
+        s = s.encode('ascii', 'xmlcharrefreplace')
+    return s
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.