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?
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?
262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e