保持@字符未转义

时间:2016-11-05 22:27:08

标签: elixir phoenix-framework

我有以下路线:

get "/@:user_name", UserController, :show

哪个似乎有效。但是,当我使用URL帮助程序时:

user_path( @conn, :show, @current_user.user_name )

输出完全转义:

  

https://url.com/%40user

如果我实现这样的路线:

get "/@/:user_name", UserController, :show

然后@符号被解除输出:

  

https://url.com/@/user

有没有办法在不转义@符号的情况下实现第一条路线?在URL路径中使用@符号是个坏主意吗?

1 个答案:

答案 0 :(得分:2)

原因是凤凰助手expands segments and then encodes paramshttp://url.com/@user中的最后一段被认为是一个参数,而http://url.com/@/user则不是。

可能有不同的意见,无论是否正确,但事实是你的参数(在这种特殊情况下的用户名)通常来自外部世界,而路线本身来自你的代码。这就是http://url.com/@/user不是URI.encode d。

的原因

我不会反对凤凰处理它的方式,而只是跟http://url.com/@/user一样。

OTOH,https://url.com/%40userhttps://url.com/@user从您的浏览器的角度来看是完全相同的,并且指向同一目的地。

希望它有所帮助。