C'est simple, non? Eh bien, cela ne fonctionne pas: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
ne sont pas l'inverse.
C'est simple, non? Eh bien, cela ne fonctionne pas: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
ne sont pas l'inverse.
Réponses:
Meilleur entrainement
Comme mentionné dans le commentaire de la première réponse, la meilleure pratique consiste à utiliser la constante PHP PHP_EOL qui représente l'EOL ( End Of Line ) du système actuel .
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP fournit de nombreuses autres constantes très utiles que vous pouvez utiliser pour rendre votre système de code indépendant, consultez ce lien pour trouver des constantes de répertoire utiles et indépendantes du système.
avertissement
Ces constantes rendent votre système de pages indépendant, mais vous pouvez rencontrer des problèmes lors du passage d'un système à un autre lorsque vous utilisez les constantes avec des données stockées sur un autre système. Les constantes du nouveau système peuvent être différentes de celles du système précédent et les données stockées peuvent ne plus fonctionner. Analysez donc complètement vos données avant de les stocker pour supprimer toutes les parties dépendantes du système.
METTRE À JOUR
Le commentaire d'Andreas m'a fait réaliser que la solution `` Best Practice '' que je présente ici ne s'applique pas au cas d'utilisation décrit: l'EOL du serveur (PHP) n'a rien à voir avec l'EOL que le navigateur (n'importe quel OS) utilise, mais c'est (le navigateur) d'où vient la chaîne.
Veuillez donc utiliser la solution de @Alin_Purcaru ( trois vers le bas ) pour couvrir toutes vos bases (et voter positivement sa réponse):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Couvrez tous les cas. Ne comptez pas sur le fait que votre entrée provient d'un environnement Windows.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
ou
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
. Pour éviter cela, utilisez: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(notez que cela \r\n
devient inutile lorsque vous utilisez ce drapeau) ou mettez simplement le \r\n
avant le \r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Essayez "\n\r"
(guillemets doubles) ou tout simplement "\n"
.
Si vous n'êtes pas sûr du type d'EOL dont vous disposez, exécutez un str_replace avant votre explosion, en remplaçant "\ n \ r" par "\ n".
/n/r
? Je sais que l'OP l'a écrit mais la bonne fenêtre eol est\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
Beaucoup de choses ici:
\r\n
pas \n\r
.\n
sans \r
(ou même dans des cas exceptionnels, peut - être juste le \r
)Compte tenu du dernier point, vous trouverez peut-être que l' preg_split()
utilisation de toutes les variantes possibles vous donnera un moyen plus fiable de fractionner les données que explode()
. Mais vous pouvez également utiliser explode()
avec juste \n
, puis utiliser trim()
pour supprimer tous les \r
caractères qui restent.
cette fonction php explose la chaîne par newline
Attention : nouvelle ligne dans Windows est \ r \ n et sous Linux et Unix est \ n
cette fonction change toutes les nouvelles lignes en mode linux puis divise-la.
attention aux lignes vides qui seront ignorées
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
exemple
$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) );
production
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
Pour une nouvelle ligne, c'est juste
$list = explode("\n", $text);
Pour une nouvelle ligne et un retour chariot (comme dans les fichiers Windows), c'est comme vous l'avez publié. Votre skuList est-elle une zone de texte?
Placez le \n
entre guillemets:
explode("\n", $_POST['skuList']);
Dans les guillemets simples, si je ne me trompe pas, cela est traité comme \
et n
séparément.
Aussi simple qu'il y paraît
$skuList = explode('\\n', $_POST['skuList']);
Il vous suffit de passer le texte exact "\ n" et l'écriture \ n directement est utilisée comme séquence d'échappement. Donc "\\" pour passer une simple barre oblique vers l'arrière puis mettre "n"
Tout d'abord, je pense que ce n'est généralement pas le cas \r\n
, deuxièmement, ce ne sont pas les mêmes sur tous les systèmes. Cela ne fonctionnera que sur les fenêtres. C'est un peu ennuyeux d'essayer de comprendre comment remplacer de nouvelles lignes car différents systèmes les traitent différemment (voir ici ). Vous pourriez avoir plus de chance avec juste \n
.
Si quelqu'un d'autre a essayé cela mais cela n'a pas fonctionné, c'est un rappel que vous pourriez avoir fait le même pet cérébral que moi.
Avez-vous d'abord échappé à la chaîne mysql? Dans ce cas, le caractère de nouvelle ligne n'est plus un caractère de nouvelle ligne.
Je n'ai rien fait pour éviter de l'analyser, juste adapté et explosé par '\ n' (littéralement barre oblique inverse et n plutôt que caractère de nouvelle ligne réel.
Vous perdez des sauts de ligne suite à la publication à partir des zones de texte d'entrée?
Ce qui fonctionne plus rapidement pour moi, c'est de copier-coller n'importe quel texte ou type de tableau Excel ou HTML ou type de nouvelle ligne et de le coller dans une zone de texte au lieu d'une boîte de saisie: cela garde les sauts de ligne intacts dans le POST.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
dans le formulaire de réception du fichier:
$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];
Cette méthode fonctionne toujours pour moi:
$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
est ostensiblement utilisé pour trouver le caractère de nouvelle ligne d'une manière compatible avec plusieurs plates-formes, il gère donc les problèmes DOS / Unix.
Essaye ça:
$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);
Voici ce qui a fonctionné pour moi. Testé en PHP 5.6 ainsi qu'en 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);