request.keys()在包含#时没有传递params

时间:2014-03-13 10:07:01

标签: python special-characters zope

我正在向我的查询字符串

发送我的GET请求到python服务器
"http://192.168.4.106:3333/xx/xx/xx/xx?excelReport**&detail=&#tt**=475&dee=475&empi=&qwer=&start_date=03/01/2014&end_date=03/13/2014&SearchVar=0&report_format=D"

我的查询字符串包含一个字符#所以当我在服务器中执行request.keys()时它没有显示任何params传递。它与其他特殊字符一起工作??

我很久没遇到这个问题了?

我正在使用zope框架? 请建议??

3 个答案:

答案 0 :(得分:1)

#字符不能像查询字符串中那样使​​用。

您应该使用%23对其进行编码,并在解析字符串时对其进行解码。

背后的原因可以在W3 site

找到

答案 1 :(得分:1)

#标记了URL的“查询”部分的结尾和“片段”的开头。如果您需要在查询中包含“#”(即request.keys()获得的GET参数),则需要对其进行编码(使用标准urllib.urlencode或您的框架提供的任何内容)。

我不确定该网址中#的目的是什么。它应该是#tt**中的关键request.keys()吗?它实际上是片段的开头吗?

现在,片段通常用于在webapp的客户端进行部分路由,因为如果您从网页内的#a转到#b,则无需重新加载页面。所以如果可能是这种情况,那么你就不能对#进行编码,因为它会失去意义。然后,您需要手动从片段部分中提取所需的参数。

答案 2 :(得分:1)

您可以使用urllib.quote来解决您的问题。

>>> import urllib

>>> urllib.quote('#')

'%23'