parte - remover quebra de linha string php



Como remover quebras de linha(sem caracteres!) Da string? (6)

Isso pode parecer um engano, mas não se preocupe - eu pesquisei tanto o SO quanto o resto da Web como resposta ao meu problema e acabei encontrando as mesmas "soluções" insuficientes repetidas vezes. De qualquer forma, aqui vai:

Estou salvando a entrada do usuário de uma área de texto em um banco de dados MySQL (dentro de 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 string de amostra pode ter esta aparência:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

Não há caracteres de final de linha ("\ n", "\ r" ou similares) na string.

Eu 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

Que, até onde eu entendo, é o esperado resultado nl2br() , já que insere as tags e não deveria substituir as quebras de linha em primeiro lugar?

No entanto, o formato que eu preciso seria o seguinte:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

Se a string tivesse caracteres EOL como "\ n" nela, eu a acertaria com str_replace() ou preg_replace() e terminaria com ela, mas não tenho idéia de qual agulha alimentar essas funções se houver não há personagens lá em primeiro lugar.

Eu posso acessar manualmente o campo relevante no banco de dados, clicar em 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.

https://src-bin.com


Answer #1

É porque nl2br() não remove novas linhas.

Retorna string com <br /> ou <br> inserido antes de todas as novas linhas ( \r\n , \n\r , \n e \r ).

Use str_replace vez disso:

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);

Answer #2

Algo um pouco mais funcional (fácil de usar em qualquer lugar):

function strip_carriage_returns($string)
{
    return str_replace(array("\n\r", "\n", "\r"), '', $string);
}

Usar PHP_EOL como o parâmetro de substituição de pesquisa também é uma boa ideia! Kudos


Answer #3

Para funcionar corretamente também no Windows, eu sugiro usar

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

"\r\n" - para Windows, "\r" - para Mac e "\n" - para Linux


Answer #4

Você deve ser capaz de substituí-lo por um preg que elimine todas as novas linhas e retornos de carro. O código é:

preg_replace( "/\r|\n/", "", $yourString );

Mesmo que os caracteres \n não apareçam, se você estiver recebendo retornos de carro, haverá um caractere invisível lá. A substituição do preg deve pegar e consertar isso.


Answer #5

str_replace (PHP_EOL, null, $ str);


Answer #6

A solução de Ben é aceitável, mas str_replace() é de longe mais rápido que preg_replace()

$buffer = str_replace(array("\r", "\n"), '', $buffer);

Usando menos energia da CPU, reduz as emissões mundiais de dióxido de carbono.





nl2br