> Quoting is so difficult to get right that if many people reimplement > quoting, some of the implementations are sure to be wrong simply because > there are so many corner cases. It seems like this might be one area where > it would be both beneficial and possible to share code between Python web > frameworks.
Well, I'm sure someone will come along and out do me, but how about the following: def javaScriptEscape(s): """Prepare ``s`` for use in a JavaScript quoted string. Both ``"`` and ``'`` are escaped, so you can use the return value in either single or double quotes. """ if not isinstance(s, unicode): s = str(s) # Never call str on unicode. s = "\"'" + s # Force repr to use single quotes. s = `s` start, end = 4, -1 # Strip outer quotes and added quotes. if s.startswith("u"): # JS strings are implicitly unicode. start += 1 s = s[start:end] s = s.replace('"', '\\"') # Escape double quotes too. return s def javaScriptQuote(s): """Escape ``s`` and wrap it in single quotes.""" return "'%s'" % javaScriptEscape(s) # Do some testing. if __name__ == '__main__': for (k, v) in [("", ""), ("a", "a"), ("\t", "\\t"), ("\n", "\\n"), ("'", "\\'"), ('"', '\\"'), ("\377", "\\xff"), ("\xff", "\\xff"), (u"\u1234", "\\u1234")]: escaped = javaScriptEscape(k) if escaped != v: raise AssertionError( "javaScriptEscape(%s) led to %s instead of %s" % (`k`, `escaped`, `v`)) assert javaScriptQuote("foo\n") == "'foo\\n'" Note, I purposely chose to have two separate functions, because I sometimes want one, and I sometimes want the other. If anyone wants this code, please consider it in the public domain. On the other hand, I wouldn't mind being included in your CONTRIB. Thanks! Best Regards, -jj -- I have decided to switch to Gmail, but messages to my Yahoo account will still get through. _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com