Un problema que siempre ha existido es la forma en que se comunica PHP con JavaScript en el lado del cliente debido a los caracteres especiales dentro de la cadena que pueden hacer que su código JS se bloquee por completo. Por ejemplo, eche un vistazo al siguiente código:
<?php
$str = <<<EOF
Test
String
EOF;
?>
<script>
var myString = "<?php echo $str ?>";
</script>
Si este código es procesado por un motor JS, por ejemplo, en el navegador, verá la siguiente excepción:
De hecho, nuestra cadena en PHP tiene varias líneas y también se imprime de la misma manera. La cadena debe escaparse, es decir, reemplazar los caracteres especiales que pueden contaminar su JavaScript para que sea adecuado para JavaScript. En este artículo le mostraremos lo fácil que es imprimir de forma segura una cadena desde PHP dentro de un contexto de JavaScript utilizando un ayudante de Symfony.
Imprimir de forma segura una cadena de PHP a JavaScript
Afortunadamente, en lugar de incluir métodos complejos que probablemente nadie va a entender, Symfony 1.4 incluye una gran cantidad de ayudantes como los DateHelper
, NumberHelper
, UrlHelper
y otros . Estos ayudantes ofrecen muchos métodos que los desarrolladores utilizan con frecuencia. Uno de estos ayudantes es el ayudante Escaping, que como su nombre lo dice, incluye un par de métodos que pueden usarse para escapar caracteres especiales de cadenas en diferentes situaciones. Para incluir este ayudante en sus vistas / acciones, simplemente puede usar el use_helper
método y el nombre del ayudante como primer argumento, que en este caso es el ayudante de escape:
<?php use_helper("Escaping"); ?>
Esto le permitirá usar diferentes funciones php simples donde se ha cargado el asistente. El que necesitamos para imprimir de forma segura una cadena de PHP dentro de un contexto de JavaScript es el método esc_js_no_entities
, este método escapa de una cadena, lo que lo hace adecuado para ser colocado en una cadena de JavaScript. Devuelve el valor de escape, así que en lugar de imprimir su variable, imprima el valor devuelto por el método que pasa su cadena como primer argumento:
<?php // Incluir el asistente de escape de Symfony 1.4 ?>
<?php use_helper("Escaping"); ?>
<?php
$str = <<<EOF
Test
String
EOF;
?>
<script>
var myString = "<?php echo esc_js_no_entities($str) ?>";
</script>
PHP imprimirá la siguiente rebaja:
<script>
var myString = " Test\n String";
</script>
Rápido y funcional, ¿no? Hay métodos más útiles que escapan de la colección de métodos para el ayudante Escapar como esc_specialchars
, esc_raw
, por lo que no se olvide de echar un vistazo a la documentación oficial legado del ayudante aquí .
Que te diviertas ❤️!
Conviertete en un programador más sociable