webForumDet fria alternativet

Neat_trim... Preg_match bryts vid linebreak i databas

PHP

5 svar · 1 597 visningar · startad av niNe

Medlem sedan maj 2005138 inlägg
Frågan#1

Tjenare

Har lite bekymmer med en funktion som kortar ner mina texter till ett antal tecken och klipper vid närmsta ord.

Koden ser ut enligt följande (hämtad här)

function neat_trim($str, $n, $delim='...') {
   $len = strlen($str);
   if ($len > $n) {
       preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches);
       return rtrim($matches[1]) . $delim;
   }
   else {
       return $str;
   }
}

Problemet är att om databasen inte innehåller 150 tecken, eller vad jag nu väljer att skriva ut, så visas ingenting. Innehåller den alltså 80 så blir det bara tomt...

Om jag dessutom har radbrytningar i databasen så väljer den bort den första delen om den inte innehåller 150 tecken och hoppar till del 2 istället.

Koden som skriver ut texten är:

echo(neat_trim(nl2br(utf8_encode($row['text'])), 150))

Hur får jag den att skriva ut allt även om det skulle vara så att det inte kommer upp i 150 tecken? Och hur får jag preg_match att förstå att den ska fortsätta trots radbrytning? Det handlar om citat, så jag måste bryta raden efter varje citat...

Medlem sedan mars 2006296 inlägg
#2

hmm kanske kan vara ett encoding problem...
Prova att byta strlen($str) till mb_strlen($str,"UTF-8")

Medlem sedan maj 2005138 inlägg
#3

Gör tyvärr ingen skillnad... Har även testat att plocka bort både nl2br och utf_encode och bara printa raden som den är, men den bryter bryter ändå vid radbrytningar.

Medlem sedan mars 2006296 inlägg
#4

Borde ha något med reg ex utrycket att göra... Jag brukar använda mig av substr istället. Otestat exempel men något sånt här:

function neat_trim( $str, $limit, $delim = "..." ){
	$len = strlen($str);

	if($len > $limit) {

		$s = substr( $str, 0, $limit );
		$i = strrpos( $s, " " );
		return substr( $s, 0, $i ).$delim;

	} else {

		return $str;

	}
}
Medlem sedan maj 2005138 inlägg
#5

Funkar ju kalas! Kanontack!

Medlem sedan mars 2006296 inlägg
#6

Nemas problemas! Alltid roligt att kunna hjälpa till :)

277 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
143 ms — ändringar (db)