253 votos

Pasar a PHP de la cadena a una variable de JavaScript (y de escape de nueva línea)

¿Cuál es la manera más fácil de codificar una cadena PHP para la salida a una variable de JavaScript?

Tengo un PHP cadena que incluye citas y saltos de línea. Necesito el contenido de esta cadena ser puesto en una variable de JavaScript.

Normalmente, sólo quiero construir mi JavaScript en un archivo PHP, a la:

<script>
  var myvar = "<?php echo $myVarValue;?>";
</script>

Sin embargo, esto no funciona cuando $myVarValue contiene citas o saltos de línea.

360voto

bobwienholt Puntos 9107

Ampliación de la respuesta:

<script>
  var myvar = <?php echo json_encode($myVarValue); ?>;
</script>

El uso de json_encode() requiere:

  • PHP 5.2.0 o superior
  • $myVarValue codificado como UTF-8 (o US-ASCII, por supuesto)

Desde el UTF-8 es compatible con Unicode completo, se puede convertir sobre la marcha.

19voto

Javier Puntos 33134

codificar con JSON

10voto

pr1001 Puntos 8334

He tenido un problema similar y entender que ésta es la mejor solución:

<script>
    var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>

Sin embargo, el vínculo que micahwittman publicado sugiere que hay algunas codificación de las diferencias. PHP rawurlencode() función se supone que es para cumplir con el RFC 1738, mientras que no parece haber habido ningún esfuerzo, con Javascript decodeURIComponent().

9voto

micahwittman Puntos 6943
function escapeJavaScriptText($string)
{
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}

4voto

Khaled Puntos 779
<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>

o

<script>
var myVar = <?= json_encode($myVarValue) ?>;
</script>

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X