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

108

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

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

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

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

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

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

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

Ответы:

180

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

SLaks
источник
Хорошо, это кажется хорошей идеей, есть ли конкретная причина использовать% 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