在http response django

时间:2015-08-10 08:37:08

标签: xml django url unicode httpresponse

我想使用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>

然后我想从地址栏进入点击,我不能。

我如何克服这个问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在注入XML内容,因此您需要进行XML编码,而不是URL编码。 &字符应为&amp;。例如。

>>> def xml_escape(s):
>>>     return s.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'", '&apos;')

>>> '<clickurl>' + xml_escape('http://www.example.com/?a=b&c=d') + '</clickurl>'
'<clickurl>http://www.example.com/?a=b&amp;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&amp;c=d</clickurl>'