Tengo un área de texto que debe conservar el valor y el formato enviados después del envío, pero por algún motivo \n no parece pasarse de la variable php variable.
$text = '1\n2\n3'; echo '<script> var text = "'.$text.'"; $( document ).ready(function() { $("textarea").attr("placeholder","1) Start Each Comment On A New Line..."); $("textarea").val(text); }); </script>'La variable se pasa de php a JS. Cuando hago eco de la variable obtengo el resultado esperado:
1\n2\n3Cuando la variable se asigna al valor del área de texto, el resultado es:
123En vez de:
1 2 3Ahora, si cambio el js a lo siguiente, obtengo el resultado esperado con cada número en una nueva línea.
$("textarea").val("1\n2\n3");¿Alguien sabe por qué la variable php no pasa \n regresa a JS?
El uso de la codificación json debería escapar de los saltos de línea de una manera que JS entenderá.
$text = json_encode('1\n2\n3'); echo '<script> var text = JSON.parse("'.$text.'"); $( document ).ready(function() { $("textarea").attr("placeholder","1) Start Each Comment On A New Line..."); $("textarea").val(text); }); </script>'Deberías usar esto.
<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> <textarea rows="4" cols="50"> </textarea> <?php $text = '1\n2\n3'; echo '<script> var text = "'.$text.'"; $( document ).ready(function() { $("textarea").attr("placeholder","1) Start Each Comment On A New Line..."); $("textarea").val(text); }); </script>' ?>El problema es que espera que el Javascript del navegador entienda el carácter "\n" de PHP. Eso no funcionará. Además, su código usa la comilla simple para denotar el carácter de nueva línea. PHP requiere que use comillas dobles para indicar el carácter especial de nueva línea.
Hay al menos dos formas de arreglar esto.
La primera es usar la función nl2br() de PHP. En ese caso, su código podría reescribirse como:
$text = "1\n2\n3"; //notice the use of double quotes. echo '<script> var text = "'. nl2br($text).'"; $( document ).ready(function() { $("textarea").attr("placeholder","1) Start Each Comment On A New Line..."); $("textarea").val(text); }); </script>' Una segunda forma es usar el HTML
etiquetar directamente en su declaración de variable. Esto obviaría la necesidad de usar la función nl2br() de PHP.
$text = '1<br>n2<br>n3'; echo '<script> var text = "'.$text.'"; $( document ).ready(function() { $("textarea").attr("placeholder","1) Start Each Comment On A New Line..."); $("textarea").val(text); }); </script>'Cualquiera de los dos enfoques debería funcionar.