2011-02-04 20 views
5

Tengo el siguiente script, que codifica parte del valor que recibe adecuadamente, pero no parece codificar comillas dobles.Codificar HTML antes del POST

¿Cómo codifico correctamente el valor completo antes de publicar?

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

El script anterior dame esto:

&lt;p&gt;Test&amp;nbsp; &lt;span style="color: #ffffff"&gt;&lt;strong&gt;&lt;span style="background-color: #ff0000"&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

necesito que me da esto:

&lt;p&gt;Test&amp;nbsp; &lt;span style=&quot;color: #ffffff&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #ff0000&quot;&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

EDIT: pregunta de seguimiento: Encoded HTML in database back to page

+2

Parece que está intentando hacer que el cliente haga HTML seguro antes de enviarlo al servidor. No hagas eso. Haga que el contenido HTML sea seguro al salir del sistema, no en el camino de entrada (y especialmente no en el cliente, donde puede ser alterado) – Quentin

+0

¿Por qué necesita hacerlo JS en el cliente? – troutinator

+0

¿Por qué quieres que te dé '"' de todos modos? A menos que esté planeando insertar los datos en un valor de atributo (que mezcle usando cadenas en lugar de usar un DOM u otra API sensible), entonces solo está usando 6 bytes cuando 1 hará y será más difícil de leer. – Quentin

Respuesta

7

No deberías Intentar codificar cosas con JavaScript.

Debe codificarlo en el servidor.

Todo lo que se puede hacer con JavaScript se puede deshacer.

Es válido para codificarlo en JavaScript si también comprueba que está codificado en el servidor, pero tenga en cuenta: JavaScript se puede deshabilitar.

+0

Intenté publicar html estándar en el servidor, pero me da un error al decir que soy tratando de hacer scripts cross-site o algo así. Aquí hay un enlace cuando intenté enviar html al servidor sin codificarlo. http://stackoverflow.com/questions/4897441/a-potentially-dangerous-request-form – oshirowanen

+1

@oshirowanen Supongo que estás usando 'vb.net', tienes que desactivar la validación de la página para poder obtener el contenido como es. – BrunoLM

+0

¿Qué estás usando como idioma del lado del servidor? –

4

Lo que George dice es verdad. Pero, si tiene que codificar cadenas del lado del cliente, le sugiero que use JavaScript encodeURIComponent().

+2

'Las funciones de escape y unescape están en desuso. Utilice encodeURI, encodeURIComponent, decodeURI o decodeURIComponent para codificar y decodificar secuencias de escape para caracteres especiales. 'https://developer.mozilla.org/en/JavaScript/Reference/Deprecated_Features – BrunoLM

+3

Y W3Schools es espantoso. http://w3fools.com – Quentin

1

Puede utilizar este módulo en js, sin necesidad de jQuery:

htmlencode

-1

Uso de escape (str) a lado del cliente

y

HttpUtility.UrlDecode (str, System.Text.Encoding.De culpa); en el lado del servidor

funcionó para mí.

+0

No estoy seguro de haber entendido la pregunta, y esto es específicamente pedir que se envíe el código del lado del cliente al servidor. Tampoco menciona el servidor en absoluto, por lo que el código del servidor que ha incluido podría no ser relevante. –

+0

Sí, Andrew tienes razón. Le he dado un truco para la codificación del lado del cliente.y, además, le he sugerido cómo manejarlo en el servidor, si es necesario, –

0

Tuve un problema similar. Simplemente utilicé el método de reemplazo en javascript. Aquí hay un buen artículo para leer: http://www.w3schools.com/jsref/jsref_replace.asp

Básicamente lo que hace el método de reemplazo es intercambia o reemplaza el personaje que funda con lo que indica como carácter (s) de reemplazo.

Así que esto:

var str=' " That " '; 
str = str.replace(/"/g,'&quot;'); 

Una vez que se conecte esto en la consola de su navegador, obtendrá algo así como

&quot; That &quot; 

Y esto:

var str=' " That " '; 
str = str.replace(/"/g,'blahblahblah'); 

Una vez que se conecte esto en la consola de su navegador, obtendrá algo como

blahblahblah That blahblahblah 
Cuestiones relacionadas