2013-06-10 2 views
2

У меня есть пользователи с slahes в их именах пользователей. Я хочу дать им простые URL-адреса, такие как /user/username, даже если их имя пользователя проблематично. т.е. /user/xXx/superboy.Кодирование компонента uri, не автоматически декодируется

Я использую маршрутизацию на стороне клиента, и я не думаю, что есть поддержка подстановочных знаков. Одним из очевидных способов исправить это было бы кодирование их имени пользователя. href="/user/xXx%2Fsuperboy". Но браузер автоматически расшифровывает URL-адрес при переходе по ссылке, а затем мой маршрутизатор не подходит в любом случае. Есть ли способ заставить браузер автоматически расшифровывать URL-адрес или каким-либо другим способом решить мою проблему (возможно, другая схема декодирования?). Благодарю.

Я использую angularjs с угловым ui-router для маршрутизации.

+0

Если он декодируется браузерами равномерно, то почему бы не попробовать его двойное кодирование? –

+0

Что вы используете на стороне сервера? Вот где у вас будут проблемы. AngularJS здесь не проблема. Например, если вы размещаете свое приложение в IIS, у вас могут быть проблемы с такими URL-адресами. –

+0

Символ '/' не указан в имени файла или папки ... как вы можете создать такой файл или папку в первую очередь. Вы можете выбрать передачу имени пользователя в качестве запроса. –

ответ

2

Часть 1.
Автоматическое декодирование URI, может быть encounted во многих ситуациях, таких, как это интерпретируется один раз, то толкование передается (чтобы быть повторно интерпретировать).

Часть 2.
В пути в URI, / имеет особое значение, так что вы не можете использовать его в качестве имени файла или каталога. Это означает, что если вы сопоставляете то, что не является реальным путем к пути, вы можете столкнуться с неожиданными символами, вызывающими проблемы. Чтобы решить эту проблему, символы должны быть закодированы.

Как вы хотите сопоставить имена пользователей с URI, вы должны подумать, что это может произойти, поэтому вам нужно кодировать таким образом, который позволяет это. Из вашего вопроса, похоже, это происходит один раз, поэтому вам нужно будет с двойным кодированием любой части URI, который не является «реальным путем URI».

Кроме того, может быть, вы можете объяснить, насколько надежно это и является ли это целесообразно

Если вы всегда он используется таким же образом, она должна быть надежной. Что касается целесообразности, было бы гораздо лучше использовать запрос , а не путь . href="/user?xXx/superboy" является допустимым URI, и вы можете легко получить строку запроса (все после первого ? или встроенный метод). Единственный персонаж, которого вы должны были наблюдать, - #, который имеет особое значение.

Смежные вопросы