我想使用django返回httpresponse,所以我使用
return HttpResponse(xml_ans, content_type='application/xhtml+xml')
。
在响应中有一个unicode的URL,它看起来像这样:
<clickurl>http://something.com?something_id=21&a</clickurl>
因此您可以看到网址具有特殊字符&amp;,我正在使用
urllib2.quote(click_url.encode("utf8"))
得到
<clickurl>http%3A//something.com%3Fsomething_id%3D21%26a</clickurl>
然后我想从地址栏进入点击,我不能。
我如何克服这个问题?
感谢您的帮助。
答案 0 :(得分:0)
您正在注入XML内容,因此您需要进行XML编码,而不是URL编码。 &
字符应为&
。例如。
>>> def xml_escape(s):
>>> return s.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"').replace("'", ''')
>>> '<clickurl>' + xml_escape('http://www.example.com/?a=b&c=d') + '</clickurl>'
'<clickurl>http://www.example.com/?a=b&c=d</clickurl>'
通常最好使用专用工具创建XML,这些工具可以自动计算转义,而不是尝试自己创建XML。例如:
>>> from xml.etree.ElementTree import ElementTree
>>> element = ElementTree.Element('clickurl')
>>> element.text = 'http://www.example.com/?a=b&c=d'
>>> ElementTree.tostring(element)
'<clickurl>http://www.example.com/?a=b&c=d</clickurl>'