Anonymous committed bf201da

[svn] Enhanced html_escape

Comments (0)

Files changed (2)


+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'


 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
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.