webForumDet fria alternativet

Pattern för att göra replace på <br /><br /> till </p><p>

PHP

4 svar · 266 visningar · startad av K@llen

Medlem sedan mars 20032 667 inlägg
Frågan#1

Hej,

Studera följande:

    $text = nl2br( $text );    
    $text = str_replace( '<br />', "</p><p>", $text );

Det blir sagolikt gräslig källkod av att enbart använda nl2br(). När jag presenterar en commentar omges den hårdkodat av <p></p>. Ponera att debattören vill ha nytt stycke. Då slår denna två enterslag. Det blir då:

<p>Text, en massa text i stycke ett<br /><br />text, en massa text i stycke2</p>

Istället vill man så klart ha det:

<p>Text, en massa text i stycke ett</p>
<p>text, en massa text i stycke2</p>

Med min replace ovan blir det så klart:

<p>Text, en massa text i stycke ett</p>
<p></p>
<p>text, en massa text i stycke2</p>

Det hade varit perfekt om man kunde ersätta två eller fler <br /> i följd med </p><p>. Hur skulle en sådan pattern kunna se ut?

Medlem sedan nov. 20017 144 inlägg
#2
(<br />){2,}

...kanske? Escapa även slashen.

Medlem sedan mars 20032 667 inlägg
#3

Tack, men den pattern verkar inte fungera även om jag escapar slashen.

Medlem sedan mars 20032 667 inlägg
#4

Detta verkar vara lösningen på mitt problem.
http://www.webforum.nu/showthread.php?t=123608

Medlem sedan mars 20032 667 inlägg
#5

Det blev nog inte riktigt bra ändå. Vi säger att skribenten skriver följande:

Detta är en fin text. Detta är en fin text. Detta är en fin text.

<blockquote>
Detta är ett fint citat.
</blockquote>

Detta är en fin text. Detta är en fin text. Detta är en fin text nummer två.

Då blir källkoden:

<p>Detta är en fin text. Detta är en fin text. Detta är en fin text.</p>

<p>
<blockquote>
Detta är ett fint citat.
</blockquote>
</p>

<p>Detta är en fin text. Detta är en fin text. Detta är en fin text nummer två.</p>

Det är <p>:na runt citatet jag (och validatorn) inte gillar.
Funktionen jag hänvisade till ovan är:

function autop($pee, $br=1) {
	$pee = preg_replace("/(\r\n|\n|\r)/", "\n", $pee); // cross-platform newlines
	$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
	$pee = preg_replace('/\n?(.+?)(\n\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, including one at the end
	if ($br) $pee = preg_replace('|(?<!</p>)\s*\n|', "<br />\n\n", $pee); // optionally make line breaks
return $pee;
}

Visst borde det gå att få till snygg och valid källkod på kommentarerna?

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
139 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)