Quand dois-je utiliser PHP_EOL au lieu de \n, et vice-versa ? Ajax/Jquery client de problème
J'ai un analyseur php qui permettent de séparer une chaîne donnée par des sauts de lignes, de faire quelque chose comme ceci:
$lines = explode(PHP_EOL,$content);
L'analyseur fonctionne très bien lorsque l'on travaille sur le côté serveur. Cependant, lorsque je passe le contenu via post en ajax (à l'aide de jquery $.méthode post) le problème se pose: les sauts de ligne ne sont pas recogniezed. Ainsi, après presque une heure de tests et des maux de tête j'ai décidé de changé PHP_EOL par "\n" et il a travaillé:
$lignes = explode("\n",$contenu);
Maintenant ça fonctionne! Merde j'ai perdu beaucoup de temps! Quelqu'un pourrait m'expliquer lors de l'utilisation PHP_EOL et "\n" correctement, afin que je puisse gagner du temps dans l'avenir? Appréciez votre type de réponses 😉
PHP_EOL
en fonction des changements sur le système de fichiers sous-jacent.- double possible de Quand dois-je utiliser la constante PHP "PHP_EOL"?
Vous devez vous connecter pour publier un commentaire.
La constante
PHP_EOL
doit généralement être utilisé pour la plate-forme de sortie spécifique.\n
←→\r\n
sur les systèmes Windows, à moins d'utiliser dansfopen(…, "wb")
mode binaire.Pour fichier d'entrée vous devriez préférer
\n
cependant. Alors que la plupart des protocoles réseau (HTTP) sont supposés utiliser\r\n
, ce n'est pas garanti.Par conséquent, il est préférable de pause sur le
\n
et de supprimer toute option\r
manuellement:Ou utiliser le
file(..., FILE_IGNORE_NEW_LINES)
fonction de loin, à un congé de fin de ligne de la manutention de PHP ou auto_detect_line_endings.Plus robuste et terser alternative est d'utiliser
preg_split()
et une regexp:La
\R
espace réservé détecte n'importe quelle combinaison de \r + \n. Donc, serait le plus sûr, et même travailler pour Classique de MacOS≤ 9
fichiers texte (rarement vu dans la pratique).Obligatoire microoptimization remarque:
Alors que les regex a un coût, il est très souvent plus rapides que les boucles manuelles et de la chaîne de post-traitement en PHP.
Et il y a quelques exemples classiques où vous devriez éviter
PHP_EOL
en raison de sa la plate-forme de l'ambiguïté:fsockopen()
.mail()
et de MIME, de la construction (qui, en réalité, vous ne devriez pas faire péniblement à vous-même de toute façon).\n
retours à la ligne, indépendamment de l'environnement.Donc utiliser un littéral
"\r\n"
combinaison lorsqu'il n'écrit pas pour les fichiers, mais la préparation des données pour un contexte spécifique qui attend réseau retours à la ligne (.\r
, ce serait une meilleure solution:preg_replace('~\r\n?~', "\n", $str);
.PHP_EOL
doit être utilisé lors de l'écriture de sortie tels que les fichiers journaux.Il produira le saut de ligne spécifiques à votre plate-forme.
PHP_EOL
est une constante en tenant le caractère de saut de ligne(s) utilisée par le serveur plate-forme. Dans le cas de Windows, c'est\r\n
. Sur *nix, c'est\n
. Vous semblez avoir un serveur Windows.Si vous étiez sur un *nix serveur, ce changement n'aurait pas fixé, car il serait
\n
. Si vous envoyez des données pour le client (le navigateur), vous devez utiliser\r\n
pour assurer les sauts de ligne sont reconnus.PHP_EOL
est la fin de ligne utilisé par le serveur PHP est en cours d'exécution sur. Contenu envoyé par l'utilisateur aura probablement de fin de ligne dans le format de leur utilisation. Cependant, au lieu d'exploser sur les retours à la ligne, simplement en utilisant lesfile()
fonction, il fait exactement ce que vous êtes après.À mon humble avis à l'aide de PHP_EOL est préférable
afin d'assurer la cohérence entre le PHP et le JS de la manipulation de saut de ligne, vous souhaiterez peut-être définir de fin de ligne variable en JS en utilisant PHP_EOL
par la suite, l'utilisation
eol
pour le partage de l'soumis textarea contenuPHP_EOL
être significatif sur le côté client?