косая черта в переменных URL


108

Я настроил свое приложение coldfusion так, чтобы на странице были динамические URL-адреса, например

www.musicExplained/index.cfm/artist/:VariableName

Однако имена моих переменных иногда будут содержать косую черту, например

www.musicExplained/index.cfm/artist/GZA/Genius

Это вызывает проблему, потому что мое приложение предполагает, что косая черта в имени переменной представляет другой раздел веб-сайта, альбомы исполнителей. Таким образом, URL-адрес не удастся.

Мне интересно, есть ли способ предотвратить это? Нужно ли мне использовать функцию, заменяющую косую черту в именах переменных другим символом?


4
Это обычные или прямые косые черты. Не обратная косая черта.
Калеб Харт

Ответы:


180

Вам нужно избегать косых черт как %2F.


Хорошо, это кажется хорошей идеей, есть ли конкретная причина использовать% 2F?
namtax

1
Это стандартная кодировка URL.
SLaks 07

44
IIS по-прежнему перехватывает это как a /и прерывает маршрут. :(
Петр Кула

21
Apache интерпретирует это как / и прерывает маршрут, если директива AllowEncodedSlashes не включена (по умолчанию она выключена)
chim

5
Для этого можно использовать encodeURIComponentи decodeURIComponent.
Кивон

17

Вы можете легко заменить косую черту /чем-то вроде подчеркивания _, которое Википедия использует для пробелов. Обычной практикой является замена специальных символов подчеркиванием и т. Д.


4
Это обычная практика, но НЕ лучшая практика. Использование экранированных символов - лучшая практика, поскольку это понимают все браузеры, каждый сервер понимает это, и каждый разработчик должен научиться делать это таким образом. Подчеркивания также не подходят для SEO! Я просто говорю это, потому что я тоже это делал и на собственном горьком опыте узнал, что это возвращается и сильно укусывает вас.
Петр Кула

1
@ppumkin - почему ты так думаешь? использование экранированных символов на самом деле не лучшая практика, поскольку при этом создаются URL-адреса, которые не удобны для пользователя и могут выглядеть очень странно для нетехнических пользователей. Я думаю, что лучше попытаться сделать URL-адреса как можно более разумными
vsync

Что касается UNderscores ARE BAD FOR SEOкомментария. Подчеркивание интерпретируется Google как подчеркивание, дефисы / дефисы интерпретируются как пробелы. Зачем? Кодировщики, многие программисты используют Google (включая самого Google с первых дней), если бы они рассматривали подчеркивания как пробелы, которые вы больше не смогли бы найти foo_bar(вероятно, какой-то класс) в результатах поиска. Бла-бла ... В заключение: нижнее подчеркивание неплохо для SEO, если вы понимаете, как на самом деле работает поисковая система, для которой вы "оптимизируете".
Уильям Истед,

8

Вам нужно избежать их, но не заменять их %2Fвручную. Вы можете использовать URLEncoderдля этого.

Например URLEncoder.encode(url, "UTF-8")

Тогда ты можешь сказать

yourUrl = "www.musicExplained/index.cfm/artist/" + URLEncoder.encode(VariableName, "UTF-8")

9
Функция URLEncoder не определена в некоторых браузерах, например Chrome. Поэтому я предлагаю использовать encodeURIComponent, w3schools.com/jsref/jsref_encodeuricomponent.asp

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.