シンプルでしょ?さて、これは機能していません:-\
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
その逆ではありません。
シンプルでしょ?さて、これは機能していません:-\
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
その逆ではありません。
回答:
ベストプラクティス
最初の回答にコメントで述べたように、ベストプラクティスは、PHP定数を使用することですPHP_EOL現在のシステムのEOL(表し、行の最後に)。
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHPは、コードをシステムから独立させるために使用できる他の非常に便利な定数を多数提供しています。このリンクを参照して、システムに依存しない便利なディレクトリ定数を見つけてください。
警告
これらの定数はページシステムを独立させますが、別のシステムに格納されているデータで定数を使用すると、あるシステムから別のシステムに移動するときに問題が発生する可能性があります。新しいシステムの定数は以前のシステムの定数とは異なる場合があり、格納されたデータは機能しなくなる可能性があります。したがって、データを格納する前に完全に解析して、システムに依存する部分を削除してください。
更新
アンドレアスのコメントは、私がここで提示する「ベストプラクティス」ソリューションは、説明されているユースケースには適用されないことを認識させました。サーバーのEOL(PHP)は、ブラウザー(任意のOS)が使用しているEOLとは何の関係もありません。しかし、それ(ブラウザ)が文字列の出所です。
@Alin_Purcaruのソリューション(3つ下)を使用して、すべてのベースをカバーしてください(そして彼の回答に賛成投票してください)。
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
すべてのケースをカバーします。入力がWindows環境からのものであるとは限りません。
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
または
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
ます。それを防ぐために、いずれかを使用:preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(注\r\n
または簡単に言えばそのフラグを使用している場合不要になる)\r\n
前に\r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
"\n\r"
(二重引用符)または単にを試してください"\n"
。
EOLのタイプがわからない場合は、分解の前にstr_replaceを実行し、「\ n \ r」を「\ n」に置き換えます。
/n/r
?OPが書いたことは知っていますが、正しいWindows \r\n
PHP_EOL
。
explode("\n", str_replace("\r", '', $string));
ここにたくさんのこと:
\r\n
ではなく\n\r
です。\n
ことなく、\r
(あるいは珍しい例では、おそらくちょうど\r
)最後の点を考えると、考えられるpreg_split()
すべてのバリアントを使用すると、よりも信頼性の高い方法でデータを分割できることがわかりますexplode()
。しかし、別の方法としてexplode()
、単にを使用してから\n
、を使用trim()
して、\r
ぶら下がったままになっている文字を削除することもできます。
このphp関数は改行によって文字列を分解します
注意:Windowsの改行は\ r \ nで、LinuxとUnixの場合は\ n
この関数はすべての改行をLinuxモードに変更してから分割します。
空の行は無視されることに注意してください
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
例
$a="\r\n\r\n\n\n\r\rsalam\r\nman khobam\rto chi\n\rche khabar\n\r\n\n\r\r\n\nbashe baba raftam\r\n\r\n\r\n\r\n";
print_r( splitNewLine($a) );
出力
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
新しいラインの場合、それは
$list = explode("\n", $text);
新しい行とキャリッジリターン(Windowsファイルの場合など)の場合は、投稿したとおりです。skuListはテキスト領域ですか?
見た目と同じくらい簡単
$skuList = explode('\\n', $_POST['skuList']);
正確なテキスト"\ n"を渡すだけで、\ nを直接書き込むことがエスケープシーケンスとして使用されます。したがって、「\\」は単純なバックスラッシュを渡し、次に「n」を入れます
まず第一に、私はそれが通常だと思います\r\n
、第二に、それらはすべてのシステムで同じではありません。これはWindowsでのみ機能します。新しいラインを別のシステムで処理する方法が異なるため、新しいラインを置き換える方法を見つけようとするのはちょっと面倒です(ここを参照)。あなただけで幸運かもしれません\n
。
入力テキストボックスからの投稿から改行を失っていますか?
私にとって速く機能するのは、テキストまたはExcelまたはHTMLのテーブルタイプまたは改行タイプのデータをコピーして貼り付け、それをinputextboxではなくtextareaに貼り付けることです。これにより、POSTの改行がそのまま保持されます。
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
受信ファイル形式:
$txtArea ='';
$txtArea = $_POST['txtArea'];
$TA = $_POST['txtArea'];
$string = $TA;
$array = preg_split ('/$\R?^/m', $string);
// or any of these:
// $array = explode(PHP_EOL,$string);
// $array = explode("\n", $txtArea);
echo "<br>A0: ".$array[0];
echo "<br>A1: ".@$array[1];
echo "<br>A2: ".@$array[2];
この方法は常に私にとってはうまくいきます:
$uniquepattern="@#$;?:~#abcz"//Any set of characters which you dont expect to be present in user input $_POST['skuList'] better use atleast 32 charecters.
$skuList=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['skuList'])));
PHP_EOL
表向きはクロスプラットフォーム互換の方法で改行文字を見つけるために使用されるので、DOS / Unixの問題を処理します。
これを試して:
$myString = "Prepare yourself to be caught
You in the hood gettin' shot
We going throw hell of blows
got my whole frame froze";
$myArray = explode(PHP_EOL, $myString);
print_r($myArray);