为什么 PHP 爆炸保持 \n?

Why is PHP explode keeping the \n?

在 Linux 下,我提交的表单包含以 \n 作为行尾的文本。那就是 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";

编辑:在 PHP 中,我这样做:

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

在源码中,提交小文后得到:

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.

我原文每段只有一个\n,为什么第一次调用explode后还留在数组中?

编辑 2:

现在更不懂了!

我将原始文件复制到 Bless Hex Editor,它在每个段落后显示一个 0A (\n)。然而,PHP 在 echo "[".strpos($t,"\n")."]"; 的括号内和 echo "[".strpos($t,"\r")."]";.

的数字位置内不输出任何内容

是我的电脑出了问题还是我的问题?

PS:现在 Bless 刚刚崩溃了...:(

不清楚这里的问题是什么。如果我采用相同的输入:

<?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);

我得到相同的输出:

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 => '',
)

可以看出,结果输出根本没有换行符。唯一可能的 问题是尾随的空元素,可以通过 运行 trim 修复 拆分前的输入。

使用preg_split和运行这个正则表达式:

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

无论您的输入来自什么环境,都应该可以工作

Here's a fiddle