在CherryPy中包含“+”的URL有问题

2024-09-21 11:34:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序,其中URL必须使用URL中的加号构造(因为这些是实际公司的名称)。我在将链接写入我的HTML时遇到了一些问题,这些链接可以被CherryPy正确地接收和处理。我认为问题是,仅在+符号的情况下,CherryPy和我的代码都试图解码传入HTML中的%2B,以便它首先(正确地)转换为+,然后进一步(错误地)转换为一个空格。在

例如,考虑格式为/:category/:company的url,其中category是Food and Beverage,两个可能的公司名称是Eat / Drink / Be Merry和{}。在

我用

 '/{}/{}'.format(
      urllib.quote_plus(self.category.encode('utf8')),
      urllib.quote_plus(self.company_name.encode('utf8'))
  )

然后,在CherryPy中,我使用/:category/:company_name这样的路由接收类别和公司名称,并对company_name执行以下处理:

^{pr2}$

这对于不包含受URL编码约束的字符的公司名称是正确的,并且对于具有大多数URL编码所需字符的公司名称也适用(例如,Eat / Drink / Be Merry没有问题)。但是,如果我原来的公司名称有一个+符号,它就不起作用了。CherryPy似乎已经为我完成了解码的部分(将%2B替换为+),因此当我应用我自己的解码时,+被替换为一个空格。在

以下是Eat / Drink / Be Merry的四个print语句的结果:

Eat%20%2F%20Drink%20%2F%20Be%20Merry
Eat%20%2F%20Drink%20%2F%20Be%20Merry
Eat / Drink / Be Merry
Eat / Drink / Be Merry

对于Jane+Janet

Jane+Janet
Jane+Janet
Jane Janet
Jane Janet

我的应用程序此时失败,因为数据库中没有要更新的“Jane Janet”条目。在

如何避免+符号的双重解码?在


Tags: name名称url符号公司be解码company
1条回答
网友
1楼 · 发布于 2024-09-21 11:34:42

url的解码(百分比编码)是http服务器不可分割的一部分,您不应该拥有urllib.unquote_plus。在

{{ery>如果你真的想得到一个非cdm}环境的话。在

但实际上,您应该只使用cherrypy直接发送给您的参数,编码/解码是HTTP数据传输的一部分,它不应该涉及到您的应用程序逻辑。在

相关问题 更多 >

    热门问题