variable una recorrer extraer escapar dentro comillas caracteres caracter cadena buscar php javascript escaping newline

una - substr php



Pase una cadena PHP a una variable de JavaScript(y escape de nuevas lĂ­neas) (14)

  1. No lo hagas Use Ajax, póngalo en atributos de data-* en su HTML, o alguna otra cosa significativa. El uso de scripts en línea hace que sus páginas sean más grandes y podría ser inseguro o aún permitir que los usuarios arruinen el diseño , a menos que ...

  2. ... haces una función más segura:

    function inline_json_encode($obj) { return str_replace(''<!--'', ''</!--'', json_encode($obj)); }

Esta pregunta ya tiene una respuesta aquí:

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

Tengo una cadena de PHP que incluye citas y nuevas líneas. Necesito que el contenido de esta cadena se ponga en una variable de JavaScript.

Normalmente, solo construiría mi JavaScript en un archivo PHP, a la:

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

Sin embargo, esto no funciona cuando $myVarValue contiene comillas o nuevas líneas.


Ampliando la respuesta de alguien más:

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

Usar json_encode() requiere:

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

Dado que UTF-8 es compatible con Unicode completo, debería ser seguro convertirlo sobre la marcha.

Tenga en cuenta que dado que json_encode escapa las barras diagonales, incluso una cadena que contiene </script> se escapará de forma segura para imprimir con un bloque de secuencia de comandos.


He tenido 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 link que micahwittman publicó sugiere que hay algunas diferencias de codificación menores. Se supone que la función rawurlencode() PHP cumple con RFC 1738 , mientras que no parece haber habido tal esfuerzo con decodeURIComponent() Javascript.


La siguiente solución de Micah funcionó para mí porque el sitio que tenía que personalizar no estaba en UTF-8, por lo que no podía usar json; Lo votaría, pero mi reputación no es lo suficientemente alta.

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


La versión paranoica: Escapando a todos los personajes .

function javascript_escape($str) { $new_str = ''''; $str_len = strlen($str); for($i = 0; $i < $str_len; $i++) { $new_str .= ''//x'' . sprintf(''%02x'', ord(substr($str, $i, 1))); } return $new_str; }

EDITAR: la razón por la que json_encode() puede no ser apropiada es que a veces, debe evitar que se genere ", por ejemplo

<div onclick="alert(???)" />


No estoy seguro si esto es una mala práctica o no, pero mi equipo y yo hemos estado usando una solución mixta de html, JS y php. Comenzamos con la cadena PHP que queremos colocar en una variable JS, llamémosla:

$someString

A continuación, utilizamos elementos de formulario ocultos en la página, y tenemos su valor establecido como la cadena:

<form id="pagePhpVars" method="post"> <input type="hidden" name="phpString1" id="phpString1" value="''.$someString.''" /> </form>

Entonces es una simple cuestión de definir una JS var a través de document.getElementById:

<script type="text/javascript" charset="UTF-8"> var moonUnitAlpha = document.getElementById(''phpString1'').value; </script>

Ahora puede usar la variable JS "moonUnitAlpha" en cualquier lugar donde desee tomar ese valor de cadena de PHP. Esto parece funcionar muy bien para nosotros. Veremos si resiste un uso intenso.


No lo addslashes() aunque addslashes() ; Si está en el contexto de la página HTML, el analizador de HTML aún puede ver la etiqueta </script> , incluso en medio de la cadena, y asumir que es el final del JavaScript:

<?php $value = ''XXX</script><script>alert(document.cookie);</script>''; ?> <script type="text/javascript"> var foo = <?= json_encode($value) ?>; // Use this var foo = ''<?= addslashes($value) ?>''; // Avoid, allows XSS! </script>


Puede insertarlo en un DIV oculto, luego asignar el código interno del DIV a su variable de JavaScript. No tienes que preocuparte por escapar de nada. Sólo asegúrese de no poner HTML roto allí.


Si utiliza un motor de creación de plantillas para construir su HTML, ¡entonces puede llenarlo con lo que quiera!

Echa un vistazo a XTemplates . Es un motor de plantilla agradable, de código abierto y ligero.

Tu HTML / JS se vería así:

<script> var myvar = {$MyVarValue}; </script>


Tu podrías intentar

<script type="text/javascript"> myvar = unescape(''<?=rawurlencode($myvar)?>''); </script>


codificarlo con JSON


htmlspecialchars

Descripción

string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )

Ciertos caracteres tienen un significado especial en HTML, y deberían estar representados por entidades HTML para preservar sus significados. Esta función devuelve una cadena con algunas de estas conversiones realizadas; Las traducciones realizadas son las más útiles para la programación web cotidiana. Si necesita que todas las entidades de caracteres HTML estén traducidas, use htmlentities () en su lugar.

Esta función es útil para evitar que el texto proporcionado por el usuario contenga una marca HTML, como en un tablero de mensajes o una aplicación de libro de visitas.

Las traducciones realizadas son:

* ''&'' (ampersand) becomes ''&amp;'' * ''"'' (double quote) becomes ''&quot;'' when ENT_NOQUOTES is not set. * '''''' (single quote) becomes ''&#039;'' only when ENT_QUOTES is set. * ''<'' (less than) becomes ''&lt;'' * ''>'' (greater than) becomes ''&gt;''

http://ca.php.net/htmlspecialchars


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

o

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


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