Nouvelle ligne de l'alinéa fonction
J'ai cette fonction intéressante que j'utilise pour créer de nouvelles lignes dans les paragraphes. Je l'utilise à la place de la nl2br()
fonction, comme il ne sort mieux du texte formaté.
function nl2p($string, $line_breaks = true, $xml = true) {
$string = str_replace(array('<p>', '</p>', '<br>', '<br />'), '', $string);
//It is conceivable that people might still want single line-breaks
//without breaking into a new paragraph.
if ($line_breaks == true)
return '<p>'.preg_replace(array("/([\n]{2,})/i", "/([^>])\n([^<])/i"), array("</p>\n<p>", '<br'.($xml == true ? ' /' : '').'>'), trim($string)).'</p>';
else
return '<p>'.preg_replace(
array("/([\n]{2,})/i", "/([\r\n]{3,})/i","/([^>])\n([^<])/i"),
array("</p>\n<p>", "</p>\n<p>", '<br'.($xml == true ? ' /' : '').'>'),
trim($string)).'</p>';
}
Le problème est qu'à chaque fois que j'essaie de créer un seul saut de ligne, il a involontairement supprime le premier caractère du paragraphe ci-dessous il. Je ne suis pas assez familier avec la regex pour comprendre ce qui est à l'origine du problème.
Vous devez vous connecter pour publier un commentaire.
Le problème est avec votre match unique pour les sauts de ligne. Il correspond au dernier caractère avant le saut de ligne et la première après. Puis vous remplacez le match avec
<br>
, donc vous perdez ces personnages. Vous avez besoin de les garder dans le remplacement.Essayez ceci:
nl2p($your_text, FALSE)
.<br />
, pas de nouvelles paragrpahs. Essayé à la fois vrai et faux. @NaturalBornCamper la solution qui fonctionne pour moi, car j'ai besoin d'seule entrée pour signifier nouveau paragraphe.Ici est une autre approche qui n'est pas d'utiliser des expressions régulières. Remarque, cette fonction permet de supprimer un seul des sauts de lignes.
Si vous avez seulement besoin de le faire une fois dans votre application et vous ne voulez pas créer une fonction, il peut facilement être fait en ligne:
J'ai aussi écrit un très simple version:
@Laurent réponse n'était pas de travail pour moi - la
else
déclaration a été de faire ce que l'$line_breaks == true
déclaration doit avoir été fait, et c'était de faire plusieurs sauts de ligne dans<br>
tags PHP natifnl2br()
déjà fait.Voici ce que j'ai réussi à faire fonctionner avec le comportement attendu:
Ici est une approche qui est livré avec une méthode inverse de remplacer les paragraphes normal des sauts de ligne et vice versa.
Ils sont utiles à utiliser lors de la construction d'un formulaire de saisie. Lors de l'enregistrement d'un utilisateur d'entrée vous pouvez convertir les sauts de ligne à des étiquettes de paragraphe, cependant lors de l'édition du texte dans un formulaire, vous ne voulez pas que l'utilisateur puisse voir tous les caractères html. Puis nous permettrait de remplacer les paragraphes retour à des sauts de ligne.
Étendre sur @NaturalBornCamper la solution:
Cela prend en charge les deux doubles sauts de ligne en les convertissant en paragraphes, sauts de ligne uniques en les convertissant en
<br />
Il suffit de taper cette entre vos lignes:
Cela vous donnera une nouvelle ligne.
<br>
balises.