src/reportlab/lib/utils.py
changeset 3349 b67514b01536
parent 3328 4d7f836cd947
child 3355 cc00d31bc99e
--- a/src/reportlab/lib/utils.py	Mon Mar 08 11:27:31 2010 +0000
+++ b/src/reportlab/lib/utils.py	Mon Mar 08 13:01:55 2010 +0000
@@ -1129,3 +1129,31 @@
         A.append(msg)
     v.args = tuple(A)
     raise t,v,b
+    
+def escapeOnce(data):
+    """Ensure XML output is escaped just once, irrespective of input
+
+    >>> escapeOnce('A & B')
+    'A & B'
+    >>> escapeOnce('C & D')
+    'C & D'
+    >>> escapeOnce('E & F')
+    'E & F'
+
+    """
+    data = data.replace("&", "&")
+
+    #...but if it was already escaped, make sure it
+    # is not done twice....this will turn any tags
+    # back to how they were at the start.
+    data = data.replace("&", "&")
+    data = data.replace(">", ">")
+    data = data.replace("<", "<")
+    data = data.replace("&#", "&#")
+
+    #..and just in case someone had double-escaped it, do it again
+    data = data.replace("&", "&")
+    data = data.replace(">", ">")
+    data = data.replace("<", "<")
+    return data
+