barras nas variáveis ​​de url

106

Eu configurei meu aplicativo coldfusion para ter urls dinâmicas na página, como

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

No entanto, meus nomes de variáveis ​​às vezes contêm barras, como

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

Isso está causando um problema, porque meu aplicativo presume que a barra no nome da variável representa uma seção diferente do site, os álbuns dos artistas. Portanto, o URL falhará.

Eu estou me perguntando se há alguma maneira de evitar que isso aconteça? Preciso usar uma função que substitua as barras nos nomes das variáveis ​​por outro caractere?

namtax
fonte
4
Essas são barras normais ou para frente. Não barras invertidas.
Caleb Hearth

Respostas:

175

Você precisa escapar das barras como %2F.

SLaks
fonte
Ok, parece uma boa ideia, há algum motivo específico para usar% 2F?
namtax
1
Esta é a codificação de URL padrão.
SLaks
44
O IIS ainda intercepta isso como um /e interrompe a rota. :(
Piotr Kula
21
O Apache interpreta isso como um / e quebra a rota, a menos que a diretiva AllowEncodedSlashes esteja ativada (por padrão, está desativada)
chim
5
Você pode usar encodeURIComponente decodeURIComponentpara esta finalidade.
Keavon
17

Você pode facilmente substituir as barras /por algo como um sublinhado _, como a Wikipedia usa para espaços. Substituir caracteres especiais por sublinhados, etc., é uma prática comum.

Caleb Hearth
fonte
4
É uma prática comum, mas NÃO é a melhor prática. Usar caracteres de escape é a prática recomendada, já que todos os navegadores entendem isso, todos os servidores entendem isso e todo desenvolvedor deve aprender a fazer isso dessa maneira. UNderscores SÃO RUINS PARA SEO também! Só estou dizendo isso porque também costumava fazer isso e aprendi da maneira mais difícil que isso volta e pica muito.
Piotr Kula de
1
@ppumkin - por que você acha isso? usar caracteres de escape não é realmente uma prática recomendada, pois produz URLs que não são amigáveis ​​ao usuário e podem parecer muito estranhos para usuários não técnicos. Acho que é melhor tentar manter os URLs o mais sensatos possível
vsync
Em relação ao UNderscores ARE BAD FOR SEOcomentário. Os sublinhados são interpretados como sublinhados pelo Google, os travessões / hífens são interpretados como espaços. Por quê? Codificadores, muitos programadores usam o Google (incluindo o próprio Google desde os primeiros dias), se tratassem os sublinhados como espaços que você não conseguiria mais encontrar foo_bar(provavelmente uma classe de algum tipo) nos resultados da pesquisa. Blah blah ... Concluindo: os sublinhados não são ruins para o SEO se você entender como o mecanismo de busca para o qual está "otimizando" realmente funciona.
William Isted
8

Você precisa escapar disso, mas não apenas substitua %2Fmanualmente. Você pode usar URLEncoderpara isso.

Por exemplo URLEncoder.encode(url, "UTF-8")

Então você pode dizer

yourUrl = "www.musicExplained/index.cfm/artist/" + URLEncoder.encode(VariableName, "UTF-8")
Aniket Thakur
fonte
9
A função URLEncoder não está definida em alguns navegadores, por exemplo, Chrome. Por isso, sugiro a utilização encodeURIComponent, w3schools.com/jsref/jsref_encodeuricomponent.asp