Pregunta

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

Lo que parece realmente "renderizarse" es:

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

¿Cuál es la forma correcta de escapar de esto para que el enlace permanezca " Something / C% 23 " ?

ACTUALIZACIÓN :
Noté una pequeña cosa rara aquí. Si usa una función para construir el enlace. El% 25 de escape adicional no es necesario. Extraño.
ex.

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

Solución

Prueba esto:

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

Expande " % " a " %25 " y obtienes lo que quieres. Entonces el & Quot; 23 & Quot; se convierte de nuevo al carácter de porcentaje y el <=> posterior no se reinterpreta.

Otros consejos

Vale la pena señalar que muchos navegadores mostrarán un enlace a " Something/C%23 " como " Something/C# " como " amigable " URL Verifique su div usando Firebug o una herramienta similar para asegurarse de que realmente se está configurando incorrectamente.

Si es así, debe escapar del signo de porcentaje como %25:

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

Escápese el porcentaje mismo y debería tenerlo.

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

Lo que parece realmente "renderizarse" es:

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

No. Si pasa el mouse sobre el enlace, Firefox le indicará en la barra de estado que el enlace va a & Quot; C # & Quot ;, pero está mintiendo. En realidad, haga clic en el enlace y terminará en & Quot; C% 23 & Quot; (aparecerá en la barra de direcciones).

  

¿Cuál es la forma correcta de escapar de esto para que el enlace permanezca " Something / C% 23 " ?

Lo tenías bien la primera vez. " Algo / C% 2523 " está codificado demasiado.

  

Noté una cosita extraña aquí. Si usa una función para construir el enlace. No se necesita el% 25 de escape adicional.

Estar en una función o no no la afectará. Lo que lo afectará, y puede confundirlo aquí, es si está utilizando la barra de direcciones para escribir javascript: URL como mecanismo de prueba. javascript: las URL siguen siendo URL y cualquier% de codificación en ellas se deshacerá un paso antes de que el intérprete de JS eche un vistazo al código. Si usó el escape literal de cadena JS, no resolvería este problema:

javascript:alert(document.body.innerHTML='<a href="Something/C\x2523">C#</a>')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top