innerHTML e C% 23 (C #) in anchor hrefs - Firefox
-
03-07-2019 - |
Domanda
If you set the innerHTML of a <div> to innerHTML = '<a href="Something/C%23">C#</a><br />';
Ciò che sembra effettivamente essere "renderizzato" è:
<div>
<a href="Something/C#">C#</a><br />
</div>
Qual è il modo corretto per sfuggire a questo in modo che il link rimanga " Something / C% 23 " ?
Aggiorna :
Ho notato una cosa strana qui. Se si utilizza una funzione per creare il collegamento. Non è necessario l'escape% 25 in più. Strano.
ex.
function buildLink(tg, nm) {
return '<a href="Something/' + tg + '">' + nm + '</a><br />';
}
Soluzione
Prova questo:
<a href="Something/C%2523">C#</a><br />
Espandi " %
" a " %25
" e ottieni quello che vuoi. Quindi il & Quot; 23
& Quot; viene riconvertito nel carattere percentuale e il successivo <=> non viene reinterpretato.
Altri suggerimenti
Vale la pena notare che molti browser renderizzeranno un collegamento a " Something/C%23
" come " Something/C#
" come " amichevole " URL. Controlla il tuo div
usando Firebug o uno strumento simile per assicurarti che non sia stato impostato correttamente.
In tal caso, devi evitare il segno di percentuale come %25
:
innerHTML = '<a href="Something/C%2523">C#</a><br />';
Scappa dalla percentuale stessa e dovresti averla.
innerHTML = '<a href="Something/C%2523">C#</a><br />';
Ciò che sembra effettivamente essere "renderizzato" è:
<a href="Something/C#">C#</a><br />
No. Passando con il mouse sopra il collegamento Firefox ti dirà nella barra di stato che il collegamento passa a & Quot; C # & Quot ;, ma sta mentendo. In realtà fai clic sul link e finirai su & Quot; C% 23 & Quot; (apparirà nella barra degli indirizzi).
Qual è il modo corretto per sfuggire a questo in modo che il link rimanga " Something / C% 23 " ?
Avevi ragione la prima volta. & Quot; Qualcosa / C% 2.523 quot &; è codificato troppo.
Ho notato una cosa strana qui. Se si utilizza una funzione per creare il collegamento. Non è necessaria l'escape% 25 in più.
Essere in una funzione o no non la influenzerà. Ciò che lo influenzerà e potrebbe confonderti qui è se stai usando la barra degli indirizzi per digitare javascript: URL come meccanismo di test. javascript: gli URL sono ancora URL e qualsiasi% di codifica in essi verrà annullata di un passo prima che l'interprete JS dia un'occhiata al codice. Se si usasse l'escaping letterale della stringa JS non si incontrerebbe questo problema:
javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')