如何在烧瓶的网址参数中保留特殊字符?

  • 本文关键字:参数 保留 特殊字符 flask
  • 更新时间 :
  • 英文 :

http://127.0.0.1:3000/segment?text=PA++
text = request.args.get('text')

我得到的是"PA",而不是"PA++"。

如何不丢失URL中的加号?我想使用 urllib.urlencode(text( 以某种方式对其进行编码,但是如何获取"文本"字符串的句柄?因为它来自request.args.get((函数。当它返回值时,特殊字符已被砍掉。

编辑:

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

我没有任何 html 页面或模板。然后在浏览器中,我可以发出请求:

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

但问题是:

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

返回的"文本"已简化为"PA",没有加号。

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

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

from flask import Flask, request
app=Flask(__name__)
template="""
<form action='/segment' method='GET'>
<input name='text' type='text' /> 
<input type='submit' />
</form>
"""
@app.route('/segment')
def index():    
text = request.args.get('text')
if text:
print ('Server got: ', text)
return f"result was: {text}"
else:
return template

如果您在输入字段中输入PA++,然后单击提交按钮:

  • 浏览器中生成的 URL 为:http://localhost:5000/segment?text=PA%2B%2B
  • 服务器控制台打印:Server got: PA++
  • 浏览器呈现:result was: PA++

同样,如果你想在没有表单的情况下执行此操作(它似乎会自动处理编码(,你可以在 Javascript 中这样做,例如在你的开发工具 JS 控制台上:

>> encoded = '/segment?text=' + encodeURIComponent('PA++')
"/segment?text=PA%2B%2B"

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

>>> 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++

最后出于演示目的,在该字符串中有一个空格:

>>> 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'
  • 服务器输出:Server got: P A

最新更新