definicion - javascript escape double quotes
Frases de escape en JavaScript (11)
Estoy emitiendo valores desde una base de datos (no está realmente abierto a la entrada pública, pero está abierto a la entrada de un usuario de la empresa, lo que significa que no estoy preocupado por XSS ).
Estoy tratando de mostrar una etiqueta como esta:
<a href="" onclick="DoEdit(''DESCRIPTION'');">Click Me</a>
DESCRIPCIÓN es en realidad un valor de la base de datos que es algo como esto:
Prelim Assess "Mini" Report
He intentado reemplazar "con /", pero no importa lo que intente, Firefox sigue cortando mi llamada de JavaScript después del espacio después de la palabra Evaluar , y está causando todo tipo de problemas.
Debo descartar la respuesta obvia, pero por mi vida no puedo entenderlo.
¿Alguien quiere señalar mi idiotez?
Aquí está la página HTML completa (será una página ASP.NET eventualmente, pero para resolver esto saqué todo lo demás excepto el código de problema)
<html>
<body>
<a href="#" onclick="DoEdit(''Preliminary Assessment /"Mini/"''); return false;">edit</a>
</body>
</html>
Amigos, ya existe la función unescape en JavaScript que hace el escape de /"
:
<script type="text/javascript">
var str="this is /"good/"";
document.write(unescape(str))
</script>
Así es como lo hago, básicamente str.replace(/[/""]/g, ''//"'')
.
var display = document.getElementById(''output'');
var str = ''class="whatever-foo__input" id="node-key"'';
display.innerHTML = str.replace(/[/""]/g, ''//"'');
//will return class=/"whatever-foo__input/" id=/"node-key/"
<span id="output"></span>
El problema es que HTML no reconoce el carácter de escape. Podría solucionarlo utilizando las comillas simples para el atributo HTML y las comillas dobles para el clic.
<a href="#" onclick=''DoEdit("Preliminary Assessment /"Mini/""); return false;''>edit</a>
Escapar de los espacios en blanco también. Me parece que Firefox está asumiendo tres argumentos en lugar de uno.
Es el personaje del espacio que no rompe. Incluso si no es todo el problema, puede ser una buena idea.
He hecho una muestra usando jQuery.
var descr = ''test"inside"outside'';
$(function(){
$("#div1").append(''<a href="#" onclick="DoEdit(descr);">Click Me</a>'');
});
function DoEdit(desc)
{
alert ( desc );
}
Y esto funciona en Internet Explorer y Firefox.
Necesitas escapar de las comillas con barras invertidas dobles.
Esto falla (producido por PHP''s json_encode ):
<script>
var jsonString = ''[{"key":"my /"value/" "}]'';
var parsedJson = JSON.parse(jsonString);
</script>
Esto funciona:
<script>
var jsonString = ''[{"key":"my //"value//" "}]'';
var parsedJson = JSON.parse(jsonString);
</script>
Por favor, encuentre en el siguiente código que escapa de las comillas simples como parte de la cadena ingresada usando una expresión regular. Valida si la cadena ingresada por el usuario está separada por comas y, al mismo tiempo, incluso escapa de las comillas simples que se ingresan como parte de la cadena. Para escapar de comillas simples, simplemente ingrese la barra inclinada hacia atrás seguida de comillas simples como: / '' como parte de la cadena. Usé el validador JQuery para este ejemplo que puede usar según su transporte.
Ejemplos de cadenas válidas:
''Hola''
''Hola Mundo''
''Hola Mundo''
''Hola Mundo'','' ''
''Es mi mundo'', ''No puedo disfrutar de esto sin mí'', ''Bienvenido, invitado''
HTML:
<tr>
<td>
<label class="control-label">
String Field:
</label>
<div class="inner-addon right-addon">
<input type="text" id="stringField"
name="stringField"
class="form-control"
autocomplete="off"
data-rule-required="true"
data-msg-required="Cannot be blank."
data-rule-commaSeparatedText="true"
data-msg-commaSeparatedText="Invalid comma separated value(s).">
</div>
</td>
JavaScript:
/**
*
* @param {type} param1
* @param {type} param2
* @param {type} param3
*/
jQuery.validator.addMethod(''commaSeparatedText'', function(value, element) {
if (value.length === 0) {
return true;
}
var expression = new RegExp("^(('')([^/'////]*(?:////.[^/'////])*)[//w//s,//.//-_//[//]//)//(]+([^/'////]*(?:////.[^/'////])*)(''))(((,)|(,//s))('')([^/'////]*(?:////.[^/'////])*)[//w//s,//.//-_//[//]//)//(]+([^/'////]*(?:////.[^/'////])*)(''))*$");
return expression.test(value);
}, ''Invalid comma seperated string values.'');
Si está ensamblando el HTML en Java, puede usar esta clase de utilidad agradable de Apache commons-lang para hacer todo el escape correctamente:
org.apache.commons.lang.StringEscapeUtils
Escapa y extrae cadenas para Java, Java Script, HTML, XML y SQL.
"
Funcionaría en este caso particular, como se sugirió antes que yo, debido al contexto HTML.
Sin embargo, si desea que su código JavaScript se escape de forma independiente para cualquier contexto, puede optar por la codificación JavaScript nativa:
''
convierte en /x27
"
convierte en /x22
Entonces tu onclick se convertiría en:
DoEdit(''Preliminary Assessment /x22Mini/x22'');
Esto también funcionaría, por ejemplo, al pasar una cadena de JavaScript como parámetro a otro método de JavaScript ( alert()
es un método de prueba fácil para esto).
Le estoy refiriendo a la pregunta de desbordamiento de pila duplicada, ¿Cómo puedo escapar de una cadena dentro del código JavaScript dentro de un controlador onClick? .
DoEdit
escapar de la cadena que está escribiendo en DoEdit
para DoEdit
los caracteres de comillas dobles. Están haciendo que el atributo onclick
HTML se cierre prematuramente.
Usar el carácter de escape de JavaScript, /
, no es suficiente en el contexto HTML. Debe reemplazar la comilla doble con la representación de entidad XML adecuada, "
.
<html>
<body>
<a href="#" onclick="DoEdit(''Preliminary Assessment "Mini"''); return false;">edit</a>
</body>
</html>
Debería hacer el truco.