Como criar um caractere de nova linha?


405

No PHP, estou tentando criar um caractere de nova linha:

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

Depois, abro o arquivo criado no bloco de notas e ele grava a nova linha literalmente:

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

Eu tentei muitas variações do \r\n, mas nenhum funciona. Por que a nova linha não está se transformando em uma nova linha?


Respostas:


639

Somente seqüências de caracteres entre aspas duplas interpretam as seqüências de escape \re \ncomo '0x0D' e '0x0A' respectivamente, então você deseja:

"\r\n"

Seqüências de caracteres simples , por outro lado, conhecem apenas as seqüências de escape \\e \'.

Portanto, a menos que você concatene a string entre aspas simples com uma quebra de linha gerada em outro lugar (por exemplo, usando string entre aspas duplas "\r\n"ou usando a chrfunção chr(0x0D).chr(0x0A) ), a única outra maneira de obter uma quebra de linha dentro de uma única string entre aspas é literalmente digitando-a com o seu editor:

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

Verifique se o editor está em busca de suas configurações de quebra de linha, se você precisar de alguma sequência de caracteres específica ( \r\npor exemplo).


1
@Pacerier A única maneira de obter retorno de carro e caracteres de nova linha em uma única string entre aspas é inserindo os caracteres diretamente via teclado (pressione Enter, dependendo das configurações do editor nas terminações de linha). Caso contrário, basta usar a concatenação de strings.
Gumbo

1
@Gumbo: Você está dizendo strings com aspas simples, por outro lado, conhece apenas as seqüências de escape \\ e \ '. Mas acabei de imprimir uma linha com eco como <? Php echo 'Você está usando o Internet Explorer. <br>'; eco 'Nova linha adicionada'; ?> e vi a saída no navegador. Ele literalmente adicionou uma nova linha entre as duas strings que eu exibi. Isso significa que o caractere <br> ou <br/> é expandido em uma sequência de aspas simples. Existem outros caracteres HTML além desses três que podem ser entendidos pelo PHP nas cadeias de caracteres citadas? Peço que você atualize sua resposta adequadamente. Obrigado.
PHPFan

1
@ user2839497 O que você está dizendo não faz nenhum sentido. Não há contexto do navegador aqui. E é claro que o navegador renderiza uma nova linha ao encontrar um <br/>. E é claro que não há nada que impeça você de adicionar '<br/>' em uma única string citada. Mas isso não renderiza uma nova linha em um arquivo de texto simples.
Esgrimista

1
@Pacerier Para uma política de aspas simples, em vez de quebras de linha no editor, como Gumbo sugeriu em seu comentário, você poderia usar a outra solução na resposta do Gumbos, exemplo: 'saída de uma nova linha'.chr (0x0A).' Em uma única string entre aspas '
Esgrimista

2
Em PHP_EOLvez disso, você deve usar
kurdtpage 18/07/19

234

Use a PHP_EOLconstante predefinida :

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

O valor constante será definido de acordo com as terminações de linha do sistema operacional em que o PHP está executando. No Linux, será "\n"; no Windows, será "\r\n".


97

O comando "eco" no PHP envia a saída para o navegador como html bruto, mesmo que entre aspas duplas o navegador não o analise em duas linhas, porque um caractere de nova linha em HTML não significa nada. É por isso que você precisa usar:

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

ao usar "eco", ou use fwrite ...

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

Isso produzirá uma nova linha HTML no lugar de "\ n".


4
Com a forma como a pergunta é feita, é provável que ele está outputing esses dados para qualquer uma caixa de texto ou javascript, etc para analisar ou ler texto simples para não ser processado como HTML
PC3TJ


23

As cadeias entre aspas duplas ""interpolam, o que significa que eles convertem caracteres de escape em caracteres imprimíveis.

As cadeias entre aspas simples ''são literais, o que significa que são tratadas exatamente como os caracteres são digitados.

Você pode ter os dois na mesma linha:

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

saídas:

$clientid $lastname
1 John Doe

Sua explicação sobre os diferentes tipos de notações de strings no PHP é boa, pois mostra o erro cometido pelo autor da pergunta. Mas seu exemplo de código não produzirá o resultado esperado, pois as variáveis ​​são usadas em uma única string entre aspas e, como você mencionou, elas não serão interpoladas!
Damien Flament

@ Damien Flament, foi o que eu disse - o conteúdo entre aspas simples não é interpolado, mas o conteúdo entre aspas duplas. Talvez meu exemplo seja confuso porque você espera ver o conteúdo de $ clientid e $ lastname, em vez dos literais "$ clientid" e "$ lastname". Eu acho que esse foi o cabeçalho de uma tabela que eu usei durante a depuração. as seguintes linhas seriamecho "$clientid $lastname\r\n"
Kevin S. Miller

Ao escrever "o resultado esperado", estou falando sobre o resultado que o autor da pergunta esperava em sua pergunta. Adicionar o código mostrado no seu comentário à sua resposta e mostrar o resultado pode melhorar a qualidade da sua resposta.
Damien Flament


13

Na verdade, \r\né para o lado html da saída. Com esses caracteres, você pode criar uma nova linha no código html para torná-lo mais legível:

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

irá produzir:

<html>First line
Second line</html>

que a visualização da página será:

First line Second line

Se você realmente quis dizer isso, basta corrigir a citação única com a citação "":

echo "\r\n";

Caso contrário, se você quiser dividir o texto, em nosso exemplo 'Primeira linha' e 'Segunda linha', será necessário usar o código html <br />::

First line<br />Second line

que produzirá:

First line
Second line

Além disso, seria mais legível se você substituir o script inteiro por:

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

1
Não, não deveria. Porque é principalmente errado. O primeiro bloco de código será renderizado como First line Second line- qualquer espaço em branco, incluindo novas linhas, será compactado para um caractere de espaço na saída renderizada. Além disso, </br>é tudo menos HTML válido.
D_4_ni

1
Também tenha em mente se você está enviando e-mails de texto com o seu script php, você ainda vai precisar essas terminações de linha em vez de quebras (<br>)
KennyV

9

O w3school ofereceu desta maneira:

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

pelo uso dessa função, você pode fazê-lo ... tentei de outras maneiras acima, mas elas não me ajudarão ..


A questão não é quebrar uma linha dentro de um parágrafo em HTML. É sobre o personagem da nova linha !
Damien Flament

Para o contexto, a nl2br()função converte caracteres de nova linha na <br />tag HTML. Isso pode ser útil para criar uma nova linha nas páginas do navegador, mas não uma nova linha em arquivos de texto ou JavaScript ou imprimir na tela ou no console.
SherylHohman 28/02

4

Por alguma razão, cada post perguntando sobre escapes de nova linha no PHP não menciona o caso de que simplesmente inserir uma nova linha em strings de aspas simples fará exatamente o que você pensa:

ex 1.

 echo 'foo\nbar';

O Exemplo 1 claramente não imprime o resultado desejado; no entanto, embora seja verdade que você não pode escapar de uma nova linha entre aspas simples, pode ter um:

ex 2.

 echo 'foo
 bar';

O exemplo 2 tem exatamente o comportamento desejado. Infelizmente, a nova linha inserida depende do sistema operacional. Isso geralmente não é um problema, pois os navegadores / servidores da Web interpretam corretamente a nova linha, seja \ r, \ r \ n ou \ n.

Obviamente, essa solução não é ideal se você planeja distribuir o arquivo por outros meios, como um navegador da web e vários sistemas operacionais. Nesse caso, você deve ver uma das outras respostas.

nota: usando um editor de texto rico em recursos, você poderá inserir uma nova linha como caractere (s) binário (s) que representa uma nova linha em um sistema operacional diferente daquele que edita o arquivo. Se tudo mais falhar, basta usar um editor hexadecimal para inserir o caractere ascii binário.


3

Use o PHP nl2br para obter as novas linhas em uma sequência de texto.

$ text = "Manu é um bom garoto. (Enter) Ele pode codificar bem.

eco nl2br ($ text);

Resultado.

Manu é um bom garoto.

Ele pode codificar bem.


1
A nl2brfunção converte caracteres de nova linha na <br />tag HTML. Se a string não contiver nenhum caractere de nova linha, esta função não fará nada! Além disso, a questão não é quebrar uma linha dentro de um parágrafo em HTML. É sobre o personagem da nova linha !
Damien Flament

2

Eu também tentei essa combinação nas aspas simples e duplas. Mas nenhum funcionou. Em vez de usar \nmelhor o uso <br/>entre aspas duplas. Como isso..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

A questão não é quebrar uma linha dentro de um parágrafo em HTML. É sobre o personagem da nova linha !
Damien Flament

2

Use chr (13) para retorno de carro e chr (10) para nova linha

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);

2

Para qualquer declaração de eco, eu sempre uso <br>aspas duplas.


2
A questão não é quebrar uma linha dentro de um parágrafo em HTML. É sobre o personagem da nova linha !
Damien Flament

1

Nada estava funcionando para mim.

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 mim:

$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";

0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.