Einfach, richtig? Nun, das funktioniert nicht: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
nicht umgekehrt.
Einfach, richtig? Nun, das funktioniert nicht: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
nicht umgekehrt.
Antworten:
Beste Übung
Wie im Kommentar zur ersten Antwort erwähnt, wird am besten die PHP-Konstante PHP_EOL verwendet, die die EOL ( End Of Line ) des aktuellen Systems darstellt .
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP bietet viele andere sehr nützliche Konstanten , mit denen Sie Ihr Codesystem unabhängig machen können. Unter diesem Link finden Sie nützliche und systemunabhängige Verzeichniskonstanten.
Warnung
Diese Konstanten machen Ihr Seitensystem unabhängig, aber beim Wechsel von einem System zu einem anderen können Probleme auftreten, wenn Sie die Konstanten mit Daten verwenden, die auf einem anderen System gespeichert sind. Die Konstanten des neuen Systems unterscheiden sich möglicherweise von denen des vorherigen Systems und die gespeicherten Daten funktionieren möglicherweise nicht mehr. Analysieren Sie Ihre Daten daher vollständig, bevor Sie sie speichern, um systemabhängige Teile zu entfernen.
AKTUALISIEREN
Durch den Kommentar von Andreas wurde mir klar, dass die hier vorgestellte "Best Practice" -Lösung nicht für den beschriebenen Anwendungsfall gilt: Die EOL (PHP) des Servers hat nichts mit der EOL zu tun, die der Browser (jedes Betriebssystem) verwendet. Aber von dort (dem Browser) kommt die Zeichenfolge.
Verwenden Sie also bitte die Lösung von @Alin_Purcaru ( drei nach unten ), um alle Ihre Grundlagen abzudecken (und seine Antwort zu verbessern):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Decken Sie alle Fälle ab. Verlassen Sie sich nicht darauf, dass Ihre Eingabe aus einer Windows-Umgebung stammt.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
oder
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
. Um zu verhindern , dass entweder Gebrauch: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(beachten Sie, dass \r\n
unnötig wird , wenn die Flagge verwendet wird ) oder einfach setzen \r\n
vor dem \r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Versuchen Sie es "\n\r"
(doppelte Anführungszeichen) oder einfach "\n"
.
Wenn Sie sich nicht sicher sind, welchen EOL-Typ Sie haben, führen Sie vor dem Explodieren einen str_replace aus und ersetzen Sie "\ n \ r" durch "\ n".
/n/r
? Ich weiß, dass das OP das geschrieben hat, aber das richtige Windows-EOL ist\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
Viele Dinge hier:
\r\n
nicht \n\r
.\n
die \r
(oder sogar in ungewöhnlichen Fällen möglicherweise nur die \r
)In Anbetracht des letzten Punktes können Sie feststellen, dass die preg_split()
Verwendung aller möglichen Varianten eine zuverlässigere Möglichkeit zur Aufteilung der Daten bietet als explode()
. Alternativ können Sie auch explode()
just verwenden \n
und dann trim()
alle \r
Zeichen entfernen , die noch herumhängen.
Diese PHP-Funktion explodiert Zeichenfolge durch Zeilenumbruch.
Achtung : Neue Zeile in Windows ist \ r \ n und unter Linux und Unix ist \ n
Diese Funktion ändert alle neuen Zeilen in den Linux- Modus und teilt sie dann auf.
Achten Sie darauf, dass leere Zeilen ignoriert werden
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
Beispiel
$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) );
Ausgabe
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
Für eine neue Linie ist es nur
$list = explode("\n", $text);
Für einen neuen Zeilen- und Wagenrücklauf (wie in Windows-Dateien) ist es so, wie Sie es gepostet haben. Ist Ihre Skilliste ein Textbereich?
Setzen Sie die \n
in doppelte Anführungszeichen:
explode("\n", $_POST['skuList']);
Wenn ich mich nicht irre, wird dies in einfachen Anführungszeichen als \
und n
separat behandelt .
Nicht perfekt, aber ich denke, es muss am sichersten sein. Fügen Sie nl2br hinzu :
$skuList = explode('<br />', nl2br($_POST['skuList']));
So einfach wie es scheint
$skuList = explode('\\n', $_POST['skuList']);
Sie müssen nur den genauen Text "\ n" übergeben und das direkte Schreiben von \ n wird als Escape-Sequenz verwendet. Also "\\" , um einen einfachen Schrägstrich zu übergeben und dann "n" zu setzen
Erstens denke ich, dass es normalerweise \r\n
, zweitens, nicht auf allen Systemen gleich ist. Das funktioniert nur unter Windows. Es ist ziemlich ärgerlich, herauszufinden, wie neue Leitungen ersetzt werden können, weil verschiedene Systeme sie unterschiedlich behandeln (siehe hier ). Sie könnten mit nur mehr Glück haben \n
.
Wenn jemand anderes dies versucht hat, es aber nicht funktioniert hat, ist dies eine Erinnerung daran, dass Sie möglicherweise den gleichen Hirnfurz wie ich gemacht haben.
Haben Sie MySQL zuerst der Zeichenfolge entkommen? In diesem Fall ist das Zeilenumbruchzeichen kein Zeilenumbruchzeichen mehr.
Ich habe nichts unternommen , um das Parsen zu vermeiden. Ich habe es nur angepasst und durch '\ n' explodiert (buchstäblich Backslash und n anstelle des tatsächlichen Zeilenumbruchs.
Zeilenumbrüche beim Posten aus Eingabetextfeldern verlieren?
Was für mich schneller funktioniert, ist das Kopieren, Einfügen eines beliebigen Textes oder eines Excel- oder HTML-Tabellentyps oder eines Newline-Datentyps und das Einfügen in einen Textbereich anstelle einer Inputextbox: Dadurch bleiben die Zeilenumbrüche im POST erhalten.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
im Formular Empfangsdatei:
$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];
Diese Methode funktioniert immer bei mir:
$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
wird angeblich verwendet, um das Zeilenumbruchzeichen plattformübergreifend zu finden, sodass DOS / Unix-Probleme behandelt werden.
Versuche dies:
$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);
Hier ist, was für mich funktioniert hat. Getestet in PHP 5.6 sowie PHP 7.0:
$skuList = str_replace("\\r\\n", "\n", $_POST['skuList']);
$skuList = str_replace("\\n\\r", "\n", $skuList);
$skuList = preg_split("/\n/", $skuList);
print_r($skuList);