PHP: ¿cómo crear un personaje de nueva línea?

405

En PHP estoy tratando de crear un personaje de nueva línea:

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

Luego abro el archivo creado en el Bloc de notas y escribe la nueva línea literalmente:

1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n

He intentado muchas variaciones de la \r\n, pero ninguna funciona. ¿Por qué la nueva línea no se está convirtiendo en una nueva línea?

davidjhp
fuente

Respuestas:

639

Solo las cadenas entre comillas dobles interpretan las secuencias de escape \ry \ncomo '0x0D' y '0x0A' respectivamente, por lo que desea:

"\r\n"

Las cadenas entre comillas simples , por otro lado, solo conocen las secuencias de escape \\y \'.

Entonces, a menos que concatene la cadena entre comillas simples con un salto de línea generado en otro lugar (por ejemplo, usando una cadena con comillas dobles "\r\n"o una chrfunción chr(0x0D).chr(0x0A) ), la única otra forma de tener un salto de línea dentro de una cadena entre comillas es literalmente escribirlo con su editor:

$s = 'some text before the line break
some text after';

Asegúrese de revisar su editor para ver su configuración de salto de línea si necesita una secuencia de caracteres específica ( \r\npor ejemplo).

Gumbo
fuente
1
@Pacerier La única forma de tener un retorno de carro y nuevos caracteres de línea en una sola cadena entre comillas es ingresando los caracteres directamente a través del teclado (presione Entrar, según la configuración de su editor en los finales de línea). De lo contrario, solo use la concatenación de cadenas.
Gumbo
1
@Gumbo: Estás diciendo que las cadenas entre comillas simples, por otro lado, solo conocen las secuencias de escape \\ y \ '. Pero acabo de imprimir una línea con echo como <? Php echo 'Estás utilizando Internet Explorer. <br>'; echo 'Nueva línea agregada'; ?> y visto la salida en el navegador. Literalmente agregó una nueva línea entre dos cadenas que mostré. Significa que el carácter <br> o <br/> se expande en una cadena entre comillas simples. ¿Hay otros caracteres HTML aparte de estos tres que PHP pueda entender dentro de las cadenas entre comillas simples? Le solicito amablemente que actualice su respuesta en consecuencia. Gracias.
PHPFan
1
@ user2839497 Lo que estás diciendo no tiene ningún sentido. No hay contexto de navegador aquí. Y, por supuesto, el navegador muestra una nueva línea cuando encuentra un <br/>. Y, por supuesto, no hay nada que le impida agregar '<br/>' en una sola cadena entre comillas. Pero eso no representa una nueva línea en un archivo de texto simple.
Fencer
1
@Pacerier Para una política de presupuesto simple en lugar de romper la cadena en el editor como Gumbo sugirió en su comentario, podría usar la otra solución en la respuesta de Gumbos, por ejemplo: 'generar una nueva línea' .chr (0x0A) 'en una sola cadena entre comillas '.
Fencer
2
Deberías usar PHP_EOLen su lugar
kurdtpage
234

Use la PHP_EOLconstante predefinida :

echo $clientid, ' ', $lastname, PHP_EOL;

El valor constante se establecerá de acuerdo con las terminaciones de línea del sistema operativo donde PHP se está ejecutando. En Linux, lo será "\n"; en Windows, lo será "\r\n".

nnevala
fuente
97

El comando "echo" en PHP envía la salida al navegador como html sin formato, por lo que incluso entre comillas dobles el navegador no lo analizará en dos líneas porque un carácter de nueva línea en HTML no significa nada. Es por eso que necesitas usar:

echo [output text]."<br>";

cuando use "echo", o en su lugar use fwrite ...

fwrite([output text]."\n");

Esto generará una nueva línea HTML en lugar de "\ n".

davea0511
fuente
44
Con la forma en que se hace la pregunta, es probable que envíe estos datos a un cuadro de texto o javascript, etc. para que el análisis o la lectura de texto sin formato no se represente como HTML
PC3TJ
43

Use la constante PHP_EOL para obtener el carácter correcto sin importar la plataforma.

http://us3.php.net/manual/en/reserved.constants.php

Un ejemplo de uso simple:

<?php
$data = 'First line' . PHP_EOL .
        'Second line' . PHP_EOL .
        'Third line';

file_put_contents("filename.txt", $data);
?>
Salvi Pascual
fuente
23

Las cadenas entre comillas dobles se ""interpolan, lo que significa que convierten los caracteres escapados en caracteres imprimibles.

Las cadenas entre comillas simples ''son literales, lo que significa que se tratan exactamente como se escriben los caracteres.

Puede tener ambos en la misma línea:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

salidas:

$clientid $lastname
1 John Doe
Kevin S. Miller
fuente
Su explicación sobre los diferentes tipos de anotaciones de cadena en PHP está bien, ya que muestra el error cometido por el autor de la pregunta. Pero su muestra de código no producirá el resultado esperado ya que las variables se usan en una sola cadena entre comillas y, como usted mencionó, ¡no se interpolarán!
Damien Flament
@Damien Flament, eso es lo que dije: el contenido entre comillas simples no se interpola, pero el contenido entre comillas dobles sí. Quizás mi ejemplo es confuso porque espera ver el contenido de $ clientid y $ lastname, en lugar de los literales "$ clientid" y "$ lastname". Creo que este fue el encabezado de una tabla que utilicé durante la depuración. las siguientes líneas habrían sidoecho "$clientid $lastname\r\n"
Kevin S. Miller
Al escribir "el resultado esperado", me refiero al resultado que el autor de la pregunta esperaba en su pregunta. Agregar el código que se muestra en su comentario a su respuesta y mostrar el resultado podría mejorar la calidad de su respuesta.
Damien Flament
15

Deberías usar esto:

"\n"

También es posible que desee echar un vistazo a PHP EOL .

Wouter Dorgelo
fuente
13

En realidad \r\nes para el lado html de la salida. Con esos caracteres, puede crear una nueva línea en el código html para que sea más legible:

echo "<html>First line \r\n Second line</html>";

dará salida:

<html>First line
Second line</html>

que ver la página será:

First line Second line

Si realmente quisiste decir esto, solo tienes que arreglar la comilla simple con la comilla "":

echo "\r\n";

De lo contrario, si quiere dividir el texto, en nuestra muestra 'Primera línea' y 'Segunda línea' debe usar el código html <br />:

First line<br />Second line

eso dará como resultado:

First line
Second line

También sería más legible si reemplaza el script completo con:

echo "$clientid $lastname \r\n";
Zapato
fuente
1
No, no debería. Porque está mayormente mal. El primer bloque de código se representará como First line Second line: cualquier espacio en blanco, incluidas las nuevas líneas, se comprimirá a un carácter de espacio en la salida representada. Además, </br>es cualquier cosa menos HTML válido.
D_4_ni
1
También tenga en cuenta que si envía correos electrónicos de texto con su script php, aún necesitará esas terminaciones de línea en lugar de saltos (<br>)
KennyV
9

w3school ofrece de esta manera:

echo nl2br("One line.\n Another line.");

mediante el uso de esta función puedes hacerlo ... intenté otras formas que dijimos anteriormente pero no me ayudarán ...

amin gholami
fuente
La pregunta no es sobre romper una línea dentro de un párrafo en HTML. ¡Se trata del personaje de nueva línea !
Damien Flament
Para el contexto, la nl2br()función convierte los caracteres de nueva línea en la <br />etiqueta HTML. Esto puede ser útil para crear una nueva línea en las páginas del navegador, pero no una nueva línea en archivos de texto, JavaScript o imprimir en la pantalla o la consola.
SherylHohman
4

Por alguna razón, cada publicación que pregunta sobre escapes de nueva línea en PHP no menciona el caso de que simplemente insertar una nueva línea en cadenas entre comillas simples hará exactamente lo que usted piensa:

ex 1.

 echo 'foo\nbar';

El ejemplo 1 claramente no imprime el resultado deseado, sin embargo, si bien es cierto que no puede escapar de una nueva línea entre comillas simples, puede tener uno:

ex 2.

 echo 'foo
 bar';

El ejemplo 2 tiene exactamente el comportamiento deseado. Lamentablemente, la nueva línea que se inserta depende del sistema operativo. Esto generalmente no es un problema, ya que los navegadores web / servidores interpretarán correctamente la nueva línea si es \ r, \ r \ n o \ n.

Obviamente, esta solución no es ideal si planea distribuir el archivo a través de otros medios que no sean un navegador web y múltiples sistemas operativos. En ese caso, debería ver una de las otras respuestas.

nota: con un editor de texto enriquecido con funciones, debería poder insertar una nueva línea como caracteres binarios que represente una nueva línea en un sistema operativo diferente al que está editando el archivo. Si todo lo demás falla, simplemente usaría un editor hexadecimal para insertar el carácter ascii binario.

usuario2574384
fuente
3

Use PHP nl2br para obtener las nuevas líneas en una cadena de texto.

$ text = "Manu es un buen chico. (Entrar) Puede codificar bien.

echo nl2br ($ texto);

Resultado.

Manu es un buen chico.

Él puede codificar bien.

Manu RS
fuente
1
La nl2brfunción convierte los caracteres de nueva línea en la <br />etiqueta HTML. Si la cadena no contiene ningún carácter de nueva línea, ¡esta función no hará nada! Además, la pregunta no se trata de romper una línea dentro de un párrafo en HTML. ¡Se trata del personaje de nueva línea !
Damien Flament
2

También probé esta combinación tanto entre comillas simples como entre comillas dobles. Pero ninguno ha funcionado. En lugar de usar \nmejor el uso <br/>de las comillas dobles. Me gusta esto..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";
Phphunger
fuente
La pregunta no es sobre romper una línea dentro de un párrafo en HTML. ¡Se trata del personaje de nueva línea !
Damien Flament
2

Use chr (13) para retorno de carro y chr (10) para nueva línea

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);
Ariful Islam Rajib
fuente
2

Para cualquier declaración de eco, siempre uso <br>comillas dobles.

Matthew Park
fuente
2
La pregunta no es sobre romper una línea dentro de un párrafo en HTML. ¡Se trata del personaje de nueva línea !
Damien Flament
1

Nada me funcionaba.

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

Funciona para mi:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";
Motahar Hossain
fuente
0

You Can Try This.
<?php
   $content = str_replace(PHP_EOL, "<br>", $your_content);
 ?>
 
<p><?php echo($content); ?></p>

Tariqul_Islam
fuente