Isso pode parecer uma bobagem, mas tenha certeza de que não. Pesquisei tanto no SO quanto no resto da web por uma resposta para o meu problema e acabei encontrando as mesmas "soluções" insuficientes repetidamente. De qualquer forma, aqui vai:
Estou salvando a entrada do usuário de uma área de texto em um banco de dados MySQL (em um ambiente WordPress, mas isso não deve importar para esse problema, acredito). Mais tarde, ele é recuperado do banco de dados para ser mostrado aos administradores no back-end do site. O problema ocorre quando os usuários enviam texto com quebras de linha (por exemplo, pressione a tecla Enter).
Uma sequência de amostra pode ser assim:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!
Greetings,
Bill
Não há caracteres de fim de linha ("\ n", "\ r" ou similares) na string.
Estou usando nl2br()
para gerar saída HTML, mas isso não é suficiente. O resultado é então:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill
Qual, até onde eu entendi, é o nl2br()
resultado esperado , pois ele insere as tags e não substitui as quebras de linha em primeiro lugar?
No entanto, o formato que eu preciso seria este:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill
Se a string continha caracteres EOL como "\ n", eu a pressionaria com uma das str_replace()
teclas preg_replace()
e terminaria com ela, mas não tenho idéia de qual agulha alimentar essas funções, se não houver caracteres. em primeiro lugar.
Posso acessar manualmente o campo relevante no banco de dados, pressionar Backspace para cada quebra de linha e o que mais tarde quero fazer com a string funciona. Então eu sei que preciso do formato acima.
Respostas:
Você deve poder substituí-lo por um preg que remove todas as novas linhas e devoluções de carro. O código é:
Mesmo que os
\n
caracteres não estejam aparecendo, se você estiver obtendo retornos de carro, haverá um caractere invisível lá. O preg substituir deve pegar e consertá-los.fonte
/\r|\n|\r\n/
A solução de Ben é aceitável, mas str_replace () é muito mais rápida que preg_replace ()
Usando menos energia da CPU, reduz as emissões mundiais de dióxido de carbono.
fonte
fonte
É porque
nl2br()
não remove novas linhas.Use em
str_replace
vez disso:fonte
Você também pode usar o trim do PHP
fonte
Para funcionar corretamente também no Windows, sugiro usar
"\r\n"
- para Windows,"\r"
- para Mac e"\n"
- para Linuxfonte
\r
e\n
forem removidos na sequência, por que não seria o caso daqueles que se seguem diretamente?\r\n
no Windows e não funcionou no Linux.\r\n
FIRST ajudaria, pois isso significa uma vírgula em vez de duas para cada parte, se essa linha for quebrada\r\n
primeiro, depois substituímos\r
e\n
, editei minha resposta.\r
e\r
, não for necessário removê-\r\n
los, você poderástr_replace(array("\r","\n"), "", $buffer);
obter o mesmo resultado.str_replace (PHP_EOL, nulo, $ str);
fonte
Algo um pouco mais funcional (fácil de usar em qualquer lugar):
Usar o PHP_EOL como parâmetro de substituição de pesquisa também é uma boa ideia! Parabéns.
fonte
Alternativa incorporada: trim ()
Está lá para remover quebras de linha de diferentes tipos de arquivos de texto, mas não lida com html.
fonte
Eu uso 3 linhas para fazer este trabalho, então considere $ s como seu "material" ...
fonte