-3

Under Linux, I'm submitting a form containing text with \n as the line ending. That's the HTML:

<form id='frmTxt' autocomplete='off' method='post' action='index.php'>
    <p>Paste your text:</p>
    <textarea name='txt'></textarea>
    <button type='submit'>Submit</button>
</form>\n";

EDIT: In PHP, I do:

$txt = explode("\n",trim($_POST['txt']));
foreach ($txt as $t) {
    $words = explode(' ',$t);
    foreach ($words as $w) {
        echo "$w ";
    }
}

In the source code, after submitting a small text, I get:

Desde agosto não caía uma gota de chuva em Santiago. Ainda bem que nas torneiras — oh, leitor carioca, meu semelhante e meu irmão! — a água é abundante e limpa, e jorra à vontade para que à tardinha todo honesto cidadão possa regar suas plantas. Só na Inglaterra há gramados como no Chile, tão verdes, tão macios, tão perfeitos e lindos; o chileno trata o capim como se fossem flores.
 Numa tarde vagabunda de sábado andei passeando pelo parque Balmaceda, cheio de árvores, crianças, flores e namorados. Não é proibido, felizmente, pisar na grama. É proibido colher flores e jogar bola, mas isso representa mais uma opinião das placas da Prefeitura que uma realidade humana. Aqui e ali três meninos jogam bola e uma garota colhe flores sem que o guarda, por esse motivo, perca seu bom humor. Também já fumei duas vezes no ônibus, ignorando o aviso, e ninguém me chamou a atenção; Chile, graças a Deus, é um bom país latino.
 Mas falávamos de chuva; choveu. Choveu de tarde e a noite inteira, e o dia amanheceu enevoado. Depois o céu foi se limpando — e há três dias, enquanto a lua cresce, ele está azul, esplêndido, sem uma nuvem. Assim chegou o frio, ainda moderado, sem descer além dos 7 graus. Mas, com a chuva, o ar ficou mais fino e o alto cimo da Cordilheira se cobriu de neve.
 É difícil contar esse lado da paisagem, esse alto horizonte, essa imensa muralha azul toucada de neve que brilha ao sol. Quando o sol vai morrendo do outro lado do horizonte, a Cordilheira começa a mudar de cor — a Montanha se faz violeta, a neve às vezes tem reflexos púrpuros ou róseos, o azul do céu vai se fazendo mais grave no crepúsculo alto e solene.
 Santiago não tem mar; mas tem, a leste, essa presença de abismo e de infinito, essa paisagem de estranha força, pureza e paz — de uma oceânica beleza.

I only have one \n for each paragraph of the original text, so why do they remain in the array after calling the first explode?

EDIT2:

Now I understand it even less!

I copied the original file to Bless Hex Editor, and it shows a single 0A (\n) after each paragraph. PHP, however, outputs nothing inside the brackets for echo "[".strpos($t,"\n")."]"; and numeric positions for echo "[".strpos($t,"\r")."]";.

Did my computer just went nuts or is it me?

PS: Now Bless just crashed... :(

Rodrigo
  • 4,706
  • 6
  • 51
  • 94

2 Answers2

2

Use preg_split and run this regular expression:

$txt = preg_split('/\r\n|\n|\r/', $_POST['txt']);

Should work, no matter what environment your input is coming from

Here's a fiddle

Cedric Ipkiss
  • 5,662
  • 2
  • 43
  • 72
1

It's not clear what the problem is here. If I take the same input:

<?php

$_POST['txt'] = <<<eof
Desde agosto não caía uma gota de chuva em Santiago. Ainda bem que nas torneiras — oh, leitor carioca, meu semelhante e meu irmão! — a água é abundante e limpa, e jorra à vontade para que à tardinha todo honesto cidadão possa regar suas plantas. Só na Inglaterra há gramados como no Chile, tão verdes, tão macios, tão perfeitos e lindos; o chileno trata o capim como se fossem flores.
Numa tarde vagabunda de sábado andei passeando pelo parque Balmaceda, cheio de árvores, crianças, flores e namorados. Não é proibido, felizmente, pisar na grama. É proibido colher flores e jogar bola, mas isso representa mais uma opinião das placas da Prefeitura que uma realidade humana. Aqui e ali três meninos jogam bola e uma garota colhe flores sem que o guarda, por esse motivo, perca seu bom humor. Também já fumei duas vezes no ônibus, ignorando o aviso, e ninguém me chamou a atenção; Chile, graças a Deus, é um bom país latino.
Mas falávamos de chuva; choveu. Choveu de tarde e a noite inteira, e o dia amanheceu enevoado. Depois o céu foi se limpando — e há três dias, enquanto a lua cresce, ele está azul, esplêndido, sem uma nuvem. Assim chegou o frio, ainda moderado, sem descer além dos 7 graus. Mas, com a chuva, o ar ficou mais fino e o alto cimo da Cordilheira se cobriu de neve.
É difícil contar esse lado da paisagem, esse alto horizonte, essa imensa muralha azul toucada de neve que brilha ao sol. Quando o sol vai morrendo do outro lado do horizonte, a Cordilheira começa a mudar de cor — a Montanha se faz violeta, a neve às vezes tem reflexos púrpuros ou róseos, o azul do céu vai se fazendo mais grave no crepúsculo alto e solene.
Santiago não tem mar; mas tem, a leste, essa presença de abismo e de infinito, essa paisagem de estranha força, pureza e paz — de uma oceânica beleza.

eof;

$txt = explode("\n", $_POST['txt']);
var_export($txt);

I get the same output:

array (
  0 => 'Desde agosto não caía uma gota de chuva em Santiago. Ainda bem que nas torneiras — oh, leitor carioca, meu semelhante e meu irmão! — a água é abundante e limpa, e jorra à vontade para que à tardinha todo honesto cidadão possa regar suas plantas. Só na Inglaterra há gramados como no Chile, tão verdes, tão macios, tão perfeitos e lindos; o chileno trata o capim como se fossem flores.',
  1 => 'Numa tarde vagabunda de sábado andei passeando pelo parque Balmaceda, cheio de árvores, crianças, flores e namorados. Não é proibido, felizmente, pisar na grama. É proibido colher flores e jogar bola, mas isso representa mais uma opinião das placas da Prefeitura que uma realidade humana. Aqui e ali três meninos jogam bola e uma garota colhe flores sem que o guarda, por esse motivo, perca seu bom humor. Também já fumei duas vezes no ônibus, ignorando o aviso, e ninguém me chamou a atenção; Chile, graças a Deus, é um bom país latino.',
  2 => 'Mas falávamos de chuva; choveu. Choveu de tarde e a noite inteira, e o dia amanheceu enevoado. Depois o céu foi se limpando — e há três dias, enquanto a lua cresce, ele está azul, esplêndido, sem uma nuvem. Assim chegou o frio, ainda moderado, sem descer além dos 7 graus. Mas, com a chuva, o ar ficou mais fino e o alto cimo da Cordilheira se cobriu de neve.',
  3 => 'É difícil contar esse lado da paisagem, esse alto horizonte, essa imensa muralha azul toucada de neve que brilha ao sol. Quando o sol vai morrendo do outro lado do horizonte, a Cordilheira começa a mudar de cor — a Montanha se faz violeta, a neve às vezes tem reflexos púrpuros ou róseos, o azul do céu vai se fazendo mais grave no crepúsculo alto e solene.',
  4 => 'Santiago não tem mar; mas tem, a leste, essa presença de abismo e de infinito, essa paisagem de estranha força, pureza e paz — de uma oceânica beleza.',
  5 => '',
)

As can be seen, the resultant output has no newlines at all. The only possible issue is the trailing empty element, which can be fixed by running trim on the input before splitting.

Zoe
  • 27,060
  • 21
  • 118
  • 148
Zombo
  • 1
  • 62
  • 391
  • 407
  • I tried to make a minimal reproducible example, but the problem persists. Later on I do a `$words = explode(' ',$t);`, being $t each element of $txt, and every final word still contains a `\n`. – Rodrigo Jul 02 '21 at 04:03
  • Edited the question. – Rodrigo Jul 02 '21 at 04:10