innerHTML e C% 23 (C #) em hrefs âncora - Firefox
-
03-07-2019 - |
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 />';
}
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>')