Pergunta

If you set the innerHTML of a <div> to innerHTML = '<a href="Something/C%23">C#</a><br />';

O que parece realmente ter 'tornado' é:

<div>
<a href="Something/C#">C#</a><br />
</div> 

O que é a maneira correta para escapar deste modo o link vai ficar "Algo / C% 23"?

Atualizar :
Notei uma coisa pouco estranho aqui. Se você usar uma função para construir o link. O extra de% 25 escape não é necessária. Estranho.
ex.

function buildLink(tg, nm) {
  return '<a href="Something/' + tg + '">' + nm + '</a><br />';
}
Foi útil?

Solução

Tente isto:

<a href="Something/C%2523">C#</a><br />

Expanda a "%" para "%25" e você consegue o que quer. Em seguida, a "%25" está de volta convertido para o caractere de porcentagem ea 23 posterior não é reinterpretado.

Outras dicas

É importante notar que muitos navegadores irá processar um link para "Something/C%23" como "Something/C#" como um URL "amigável". Verifique se o seu div usando o Firebug ou uma ferramenta semelhante para ter certeza que está realmente a ser definido incorretamente.

Se sim, então você precisa escapar o sinal de porcentagem como %25:

innerHTML = '<a href="Something/C%2523">C#</a><br />';

Escape the cento em si e você deve tê-lo.

innerHTML = '<a href="Something/C%2523">C#</a><br />';

O que parece realmente ter 'tornado' é:

<a href="Something/C#">C#</a><br />

Não. Se você passar o mouse sobre o link Firefox irá dizer-lhe na barra de status que o link vai para "C #", mas está mentindo. Na verdade, clique no link e você vai acabar no "C% 23" (que vai aparecer logo na barra de endereço).

O que é a maneira correta para escapar deste modo o link vai ficar "Algo / C% 23"?

Você estava certo da primeira vez. "Algo / C% 2523" é codificado demais.

Eu notei uma coisa pouco estranho aqui. Se você usar uma função para construir o link. escapando não é necessário o% extra 25.

Sendo em uma função ou não, não irá afetá-lo. O irá afetá-lo, e pode ser confuso aqui, é se você estiver usando a barra de endereços para digitar javascript: URLs como um mecanismo de teste. javascript: URLs ainda são URLs e qualquer% -encoding neles será desfeita um passo antes que o intérprete JS recebe uma olhada no código. Se você usou cordas JS literal escapar você não iria responder a este problema:

javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top