2016-11-05 1 views
1

를 이스케이프 나는 다음과 같은 경로가 : 작업 표시보관할 것 @ 문자는

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

합니다. 출력은 완전히 이스케이프

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

: 나는 URL 도우미를 사용할 때,

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

:

https://url.com/%40user

이 같은 경로를 구현하는 경우 그러면 @ 기호는 이스케이프되지 않은 채로 출력됩니다 :

https://url.com/@/user

@ 기호에 대한 탈출하지 않고 첫 번째 경로를 구현하는 방법이 있습니까? URL 경로에서 @ 기호를 사용하는 것이 좋지 않습니까?

+0

문자열에 '/ : username'및 패턴 일치를 사용해 보셨습니까? 어쩌면 당신의 컨트롤러에서 다음과 같을 것이다.'def show (conn, % { "params"=> "@")''? – Sheharyar

답변

2

그 이유는 phoenix 도우미 expands segments and then encodes params입니다. http://url.com/@user의 마지막 세그먼트는 param으로 간주되며 http://url.com/@/user에는 그렇지 않습니다.

올바른 의견인지 아닌지에 대한 의견이 다를 수 있지만 진실은 경로 자체가 코드에서 비롯되는 반면 일반적으로 외부 세계에서 오는 param (이 경우 사용자 이름)이라는 것입니다. . 그렇기 때문에 http://url.com/@/userURI.encode이 아닙니다.

나는 피닉스가 어떻게 처리하는지에 대해 싸우지 않을 것이고 단순히 http://url.com/@/user 등과 같이 갈 것입니다.

OTOH, https://url.com/%40userhttps://url.com/@user은 브라우저의 관점에서 볼 때 정확히 동일하며 동일한 수신처로 연결됩니다.

희망이 있습니다.

+0

내가 생각했던 것을 확인하는 데 도움이됩니다. 나는 주로 미적으로 기분이 좋게 보이도록 @ 기호 대신에 @ 기호를 원했습니다. 그래서 사용자는 다른 사용자 프로필을보기 위해 같은 형식을 사용할 수 있다는 것을 알고 있습니다. – Mitkins

+0

나는 약간의 후 처리 작업을 수행 할 수 있다고 생각했습니다. user_path를 호출하고 URL 경로의 루트에있는 경우 % 40을 @ 기호로 바꿉니다. 이 경우 URL 경로의 @ 기호가있는 규칙이 깨지지 않는다고 가정합니다. – Mitkins

+0

내 의견으로는 후 처리하는 것이 안전합니다. – mudasobwa