怎么让浏览器地址栏正常显示 @字符,而不是 urlencode 后的 %40 这样?

2016-07-12 21:53:26 +08:00
 rogwan
(文件环境: Python3, flask jinja2, 文件是 utf-8 编码)

我写了一个路由:
@app.route('/@<username>', methods=['GET', 'POST'])
def user(username):
pass ...

手工在浏览器里输入:
example.com/@username ,这样 @字符在新版的浏览器里都可以正常显示的。
但是,如果是从模板 Template 中渲染的链接 href="{{ url_for('.user', username=username) }} , 点击链接在新页面的浏览器地址栏里,@字符就会被转码成 %40 。

这个怎么能让 url 依旧保持原来的编码啊?(虽然 @转成%40 功能不影响,但是 url 不优雅嘛 )
8912 次点击
所在节点    Python
15 条回复
dxwwym
2016-07-12 22:02:25 +08:00
楼主是处女座?
firstway
2016-07-12 22:31:32 +08:00
“浏览器地址栏里,@字符就会被转码成 %40 。 ”我觉得没有办法不这样,除非你自己写一个浏览器。
FrankFang128
2016-07-12 22:35:22 +08:00
Chrome 就可以啊
楼主你这个观察能力
honkew
2016-07-12 22:57:14 +08:00
没有发现 @变成%40
yeyeye
2016-07-13 01:56:18 +08:00
@dxwwym
@firstway
@FrankFang128

@honkew

我感觉你们误解了 楼猪说了 新版浏览器手测有用 但是后端生成链接的时候 程序把它转码了 所以要解决程序生成的时候的问题
tifan
2016-07-13 06:51:16 +08:00
按照 RFC 3986, @ 符号是 reserved character ,进行 encode 是标准预期的行为。

https://tools.ietf.org/html/rfc3986#section-2.2
rogwan
2016-07-13 08:48:48 +08:00
@yeyeye 谢谢解释,你的理解完全正确。
rogwan
2016-07-13 08:51:44 +08:00
@firstway
@tifan

建议可以看下 medium.com ,在任何页面点击用户名,跳转的页面 url 里都是 https://medium.com/@username 这个原生格式,@字符并没有被转码。
LPeJuN6lLsS9
2016-07-13 09:12:35 +08:00
这问题是你问的啊: https://stackoverflow.com/questions/38319627/how-to-display-instead-of-being-encoded-as-40-urlencode-in-browser-address

就 unquote 一个吧。不过回答你问题的人举的例子,在 href 里用未 encode 的 url 就算了,还在 redirect 里用,会不会出问题?
LPeJuN6lLsS9
2016-07-13 09:15:20 +08:00
@rogwan 你在地址栏手动输这类符号浏览器会自动 decode 。你在页面里点链接,如果 href 是未 encode 的,浏览器也会自动 decode

这类的浏览器指 firefox
rogwan
2016-07-13 09:51:35 +08:00
@hantsuki 你太牛了! SO 上的问题都被你抄家了。。。
rogwan
2016-07-13 09:58:17 +08:00
@hantsuki medium.com 做的很好啊,不管什么浏览器,连 IE 都显示原生 href 字符,不会进行 url 转码( Urlencode )。
shunia
2016-07-13 10:39:48 +08:00
medium 可能是 js 处理的哦。。。
mulog
2016-07-13 10:56:32 +08:00
这是你渲染模板时就已经 urlencode 了吧,我记得 url_for 是会做 urlencode 的, 你再把 %40 replace 掉呗 (也很不优雅)。。
我只是好奇一下,你觉得 /@username 比 /username 好在哪里?
21grams
2016-07-13 11:37:41 +08:00
我看了 stackoverflow 上的问题才明白楼主问的是什么,楼主的英文表达强于中文。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX