Pregunta

Estoy generando algunos javascript en mi código PHP, y yo tenga que asignar algunas variables php a las variables JavaScript. Por desgracia, a veces mis variables de PHP contienen comillas. por ejemplo:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";

generará un error de JavaScript porque el javascript resultante tendrá este aspecto:

<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';

Sé que puedo utilizar expresiones regulares en $ foo para reemplazar todas las marcas ' con \' pero esto es difícil por varias razones. ¿Hay algo que pueda hacer menos que eso? Algo parecido a la función del Perl q() ...

¿Fue útil?

Solución

intentado hacer esto?

$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';

Ver: http://php.net/manual/en/function.addslashes .php

Otros consejos

Esto debería ser un paso en la dirección correcta:

addcslashes($str, "\"\r\n\\\t/\0..\37");

¿Está seguro? ¿No es:

var foo = ''Dis here be a "string"'

Con el fin de evitar que el doble 'try:

$foo = "\'Dis here be a \"string\"";

o

$foo = '\\\'Dis here be a "string"';

Es también digno de mención que se puede utilizar un archivo PHP como un archivo JavaScript

<script type="text/javascript" src="js/main.php"></script>

Y usted es capaz de ejecutar código PHP en ese archivo, así como la salida de código JavaScript haciendo eco desde PHP.

Desde que está utilizando el valor final en JavaScript, me gustaría utilizar json_encode:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";

Y lo hará correctamente de salida:

<script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>

Aviso no puse un juego extra de comillas alrededor de la función json_encode. Se añadirá las cotizaciones necesarias para que sea una cadena JavaScript válida automáticamente.

La respuesta de Frank Farmer es interesante, pero es escapar algunas cosas que no necesitan ser escapado, como las fichas.

Trate de este fragmento, funciona muy bien:

<script type="text/javascript">
    alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>

Desde siempre estoy conectado a una base de datos en mis scripts PHP que pasan texto directamente en cadenas JavaScript, me apoyo en real_escape_string para hacer mi trabajo sucio. addslashes () no controla los saltos de línea y los que a veces colarse en las cadenas que estoy pasando a Javascript.

A $sql->real_escape_string($string) simple hace todo mejor, escapando de lo que sea la base de datos escupe en una forma Javascript ambiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top