如何在flask的url参数中保留特殊字符?

如何在flask的url参数中保留特殊字符?,flask,Flask,我得到的是“PA”,而不是“PA++” 如何不丢失URL中的加号?我想使用urllib.urlencode(text)以某种方式对其进行编码,但如何获得“text”字符串的句柄呢?因为它来自request.args.get()函数。当它返回值时,特殊字符已经被截断 编辑: http://127.0.0.1:3000/segment?text=PA++ text = request.args.get('text') 我没有任何html页面或模板。然后在浏览器中,我可以进行请求: @api.ro

我得到的是“PA”,而不是“PA++”

如何不丢失URL中的加号?我想使用urllib.urlencode(text)以某种方式对其进行编码,但如何获得“text”字符串的句柄呢?因为它来自request.args.get()函数。当它返回值时,特殊字符已经被截断

编辑:

http://127.0.0.1:3000/segment?text=PA++

text = request.args.get('text')
我没有任何html页面或模板。然后在浏览器中,我可以进行请求:

@api.route('/segment', methods=['GET'])
def segment():
    text = request.args.get('text')
    seg = str(segmenter.segment(text))
    return seg
但问题是:

http://0.0.0.0:5000/segment?text=PA++

返回的“文本”已减少为“PA”,没有加号。

我认为您要实现的目标需要在提交表单之前在前端完成

如前所述,您需要点击
http://127.0.0.1:3000/segment?text=PA%2B%2B
在浏览器中。因此编码发生在前端。标准表单应该自动执行,所以如果您考虑这个示例应用程序:

text = request.args.get('text')

Python请求库还自动执行此编码:

>> encoded = '/segment?text=' + encodeURIComponent('PA++')
"/segment?text=PA%2B%2B"
  • 服务器还输出:
    Server-got:PA++
最后,出于演示目的,在该字符串中使用空格:

>>> import requests
>>> r=requests.get('http://localhost:5000/segment', params = {'text':'PA++'})
>>> r.url
'http://localhost:5000/segment?text=PA%2B%2B'
>>> r.text
'result was: PA++' 
  • 服务器输出:
    Server-got:pa

+
是为空间保留的。您需要点击:
http://127.0.0.1:3000/segment?text=PA%2B%2B
文本中输入正确的字符串。有关详细信息,请参阅。@v25是的,我想使用urlEncoder,但如何在request.args.get('text')中使用它。看来我没有机会使用它。get()函数已将其删除。“如果在输入字段中输入PA++”,请查看我的编辑。我不使用任何html表单。我只是在浏览器的地址框中发出请求。在这种情况下,如何在我上面的段函数中对其进行编码?@marlon据我所知,你不能。因为URL字符串中的任何
+
在到达服务器时都会变成一个空格。因此,解决方案是预先对
+
进行编码,因此将其作为
%2B
发送。正如这个答案所示,有很多方法可以通过客户端脚本来实现这一点。
>>> import requests
>>> r=requests.get('http://localhost:5000/segment', params = {'text':'PA++'})
>>> r.url
'http://localhost:5000/segment?text=PA%2B%2B'
>>> r.text
'result was: PA++' 
>>> r=requests.get('http://localhost:5000/segment', params = {'text':'P A'})
>>> r.url
'http://localhost:5000/segment?text=P+A'
>>> r.text
'result was: P A'