You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中非ASCII URL路由问题:含#及俄语字符的路由实现

解决Flask中含#符号及俄语词汇的URL路由问题

嘿,我来帮你搞定这个问题!你遇到的问题主要有两个核心点:#符号在URL中的特殊行为,以及俄语字符的路由匹配处理,咱们一步步拆解解决:

1. 先搞清楚#符号的坑

浏览器会把URL里的#当作「片段标识符」,这部分内容是不会发送给服务器的!也就是说,如果你直接在地址栏输入/hashtags/#привет,Flask后端根本收不到#привет这串内容——浏览器只把/hashtags/发给了服务器。

解决办法很直接:把#编码成URL转义字符%23,这样浏览器就会把它当作路径的一部分发送给服务器。比如访问/hashtags/%23привет,后端就能完整接收到#привет了。

2. 修正Flask路由的写法

你原来的路由写法有点绕,其实Flask原生就支持处理非ASCII字符的路由变量,只要用正确的变量规则定义就行。推荐用两种规则:

  • <string:names>:默认匹配除了/之外的所有字符,完全适配你的hashtag场景
  • <path:names>:如果你的hashtag里可能包含/,就用这个,它能匹配带/的完整路径

修改后的完整代码如下:

# -*- coding: utf-8 -*-
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/hashtags/<string:names>', methods=['GET'])
def get_hashtags(names):
    # 这里可以直接处理接收到的内容,比如返回给前端确认
    return jsonify({"received_hashtag": names})

if __name__ == '__main__':
    app.run(debug=True)

3. 测试验证

启动Flask服务后,在浏览器访问:
http://localhost:5000/hashtags/%23привет
或者
http://localhost:5000/hashtags/%23ПомогитеМнеПожалуйста

你会看到返回的JSON里包含了你发送的完整hashtag,包括#和俄语词汇,完全符合预期。

额外小提示

如果是通过前端页面跳转或发送请求,记得用encodeURIComponent()(JavaScript)把#编码成%23,不用手动输入转义字符,前端会自动处理好~

内容的提问来源于stack exchange,提问作者ksusha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:01:14