Pasar una variable PHP a una variable JavaScript
¿Cuál es la forma más sencilla de codificar una cadena PHP para enviarla a una variable de JavaScript?
Tengo una cadena PHP que incluye comillas y nuevas líneas. Necesito que el contenido de esta cadena se coloque en una variable de JavaScript.
Normalmente, simplemente construiría mi JavaScript en un archivo PHP, al estilo:
<script>
var myvar = "<?php echo $myVarValue;?>";
</script>
Sin embargo, esto no funciona cuando $myVarValue
contiene comillas o nuevas líneas.
Ampliando la respuesta de otra persona:
<script>
var myvar = <?= json_encode($myVarValue, JSON_UNESCAPED_UNICODE); ?>;
</script>
Usar json_encode() requiere:
- PHP 5.2.0 o superior
$myVarValue
codificado como UTF-8 (o US-ASCII, por supuesto)
Dado que UTF-8 admite Unicode completo, debería ser seguro realizar la conversión sobre la marcha.
Tenga en cuenta que si usa esto en atributos html como onclick, debe pasar el resultado de json_encode a htmlspecialchars(), como se muestra a continuación:
htmlspecialchars(json_encode($string), ENT_QUOTES);
o podría tener problemas, por ejemplo, &bar;
al foo()&&bar;
ser interpretado como una entidad HTML.
codificarlo con JSON
function escapeJavaScriptText($string)
{
return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
Tuve un problema similar y entiendo que la siguiente es la mejor solución:
<script>
var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>
Sin embargo, el enlace que publicó micahwittman sugiere que existen algunas diferencias menores de codificación. Se supone que la función de PHP rawurlencode()
cumple con RFC 1738 , mientras que no parece haber habido tal esfuerzo con Javascript decodeURIComponent()
.