Pour les textes relativement courts, où les lignes peuvent être délimitées par un ("\n") ou deux ("\r\n") caractères, la solution en une seule ligne pourrait être comme suit
$line = preg_split('#\r?\n#', $input, 2)[0];
pour n'importe quelle séquence avant le premier saut de ligne, même s'il s'agit d'une chaîne vide,
ou
$line = preg_split('#\r?\n#', ltrim($input), 2)[0];
pour la première chaîne non vide.
Cependant, pour les grands textes, cela pourrait poser des problèmes de mémoire, donc dans ce cas strtok
mentionné ci-dessous ou une solution basée sur substr
présentée dans les autres réponses devraient être préférées.
Lorsque cette réponse a été écrite pour la première fois, il y a près d'une décennie, elle présentait quelques nuances subtiles
- elle était trop localisée, en suivant le Post d'ouverture avec l'hypothèse que le délimiteur de ligne est toujours un unique caractère "\n", ce qui n'est pas toujours le cas. Utiliser
PHP_EOL
n'est pas la solution car nous pouvons être confrontés à des données externes, non affectées par les paramètres du système local
- il était supposé que nous avons besoin de la première chaîne non vide
- il n'y avait pas moyen d'utiliser à la fois
explode()
ou preg_split()
en une ligne, d'où une astuce avec strtok()
était proposée. Cependant, peu de temps après, grâce à la Syntaxe de Variable Uniforme, proposée par Nikita Popov, il est devenu possible d'utiliser l'une de ces fonctions en une seule ligne soignée
mais comme cette question a gagné en popularité, il est préférable de couvrir tous les cas particuliers possibles dans la réponse. Mais pour des raisons historiques, voici la solution originale:
$str = strtok($input, "\n");
qui renverra la première ligne non vide du texte au format unix.
Cependant, étant donné que les délimiteurs de ligne peuvent être différents et que le comportement de strtok()
n'est pas si direct, car "Les caractères de délimitation au début ou à la fin de la chaîne sont ignorés", comme le dit la page de manuel pour la fonction strtok() originale en C, je conseillerais maintenant d'utiliser cette fonction avec prudence.
0 votes
Vous voudrez peut-être utiliser des guillemets doubles autour de cela
\n
. Quand je l'avais entre apostrophes en créant du contenu de courrier électronique, le caractère de saut de ligne\n
était simplement affiché comme des caractères normaux.1 votes
Pourquoi la restriction de
une seule ligne
?