2010-11-24 10 views
7

tengo código como este:¿Cómo manejar nuevas líneas en Javascript? (A partir de PHP)

<?php 
echo '<script type="text/javascript">'; 
echo 'var out="'.$txt.'";'; 
echo '</script>'; 
?> 

Donde $ txt es una variable PHP que puede contener saltos de línea como esta:

line1 
line2 hello world 

, terminaría de esta manera:

var out="line1 
line2 hello world"; 

Lo que provocará un error de Javascript, por supuesto.

¿Cuál es la mejor manera de manejar esto? La variable de salida se utilizará en un área de texto HTML, así que no creo que se puede analizar en <br>

Respuesta

27
$txt = str_replace(array("\n", "\r"), array("\\n", "\\r"), $txt); 

debe reemplazar las nuevas líneas. No lo haga de esta manera.

Esto es un na ï ve implementación de cadena de escape para JavaScript. Como eres en realidad tratando de formatear una cadena para su uso en JavaScript, una solución mucho mejor sería utilizar json_encode:

$txt = json_encode($txt); 
echo "<script>var out={$txt};</script>"; 

json_encode escapará correctamente los caracteres especiales en secuencias, tales como cotizaciones, pestañas, la forma alimentaciones y otros caracteres especiales de Unicode. También realizará todos los escapes correctos para convertir objetos, matrices, números y booleanos.

+0

textarea no analiza \ n, sin embargo, aparece como "\ n" en el área de texto real. – Zeno

+0

¿escapaste tres veces '\ n'? En JavaScript '" \ n "' será una nueva línea, pero si la pasa '" \\ n "' obtendrá '\ n' como salida. Verifique el origen de su página y vea cómo sale el código JavaScript. – zzzzBov

+0

Tu pregunta era cómo manejarlo para Javascript. No ejecute str_replace en él si lo está colocando en un área de texto. – Jonah

3

se puede añadir un \ al final de una línea para crear una línea de cadena múltiple

var out="line1 \ 
line2 hello world"; 
+0

¿Algo como esto?$ txt = str_replace (array ("\ n", "\ r"), array ("\ n", "\ r \\"), $ txt); – Zeno

+0

eres un salvavidas hombre: * –

0

puede utilizar str_replace para convertir los saltos de línea en un personaje diferente (en este caso, tal vez un espacio, pero depende de cómo desea que la salida se muestre)

$out = str_replace("\n", '\n', $in); 
+0

no olvides esos molestos retornos de carruaje. Casi lo hice. – zzzzBov

0

Intenté esto y funcionó bien.

<?php 
    echo '<script type="text/javascript">'; 
    $txt = "line1 \\n line2 hello world"; 
    echo 'var out="'.$txt.'";'; 
    echo '</script>'; 
?> 

estoy usando PHP 5,3

0
$content = str_replace("\\n", "\\\\\\n", $content); 

Resultado:

var a = "Hello \ 
World" 
0

La mayoría de estos no funcionan para mí. Normalmente, usaría json_encode como

<?php 
     $MyVar = json_encode($MyVar); 
    ?> 
    <javascript language='javascript'> 
     MyVar = <?php echo $MyVar; ?> 

Pero para una solución rápida que sólo se puede romper una línea como esta: Prestar atención a las comillas dobles.

<?php 
    $MyVar = "line one here 
       then line two here 


       finally line five here"; 

    //** OR 

    $MyVar = $MyVarA . 
    " 

    " 
    . $MyVarB; 

    ?> 
    <HTML> 
    <HEAD> 
    <javascript language='javascript'> 
    Myvar = "<?php echo $MyVar; ?>"; 

. . .

Cuestiones relacionadas