Pasar una variable PHP a una variable JavaScript

Resuelto David Laing asked hace 54 años • 14 respuestas

¿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 $myVarValuecontiene comillas o nuevas líneas.

David Laing avatar Jan 01 '70 08:01 David Laing
Aceptado

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
  • $myVarValuecodificado 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.

bobwienholt avatar Oct 03 '2008 21:10 bobwienholt

codificarlo con JSON

Javier avatar Oct 03 '2008 18:10 Javier
function escapeJavaScriptText($string)
{
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
micahwittman avatar Oct 03 '2008 18:10 micahwittman

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().

pr1001 avatar Jan 14 '2009 13:01 pr1001