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