---
title: "Neat_trim... Preg_match bryts vid linebreak i databas"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/187034-neat-trim-preg-match-bryts-vid-linebreak-i-databas"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "niNe"
published: "2011-05-27T12:03:43.000Z"
updated: "2011-05-31T18:32:50.000Z"
replies: 5
views: 1607
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/187034-neat-trim-preg-match-bryts-vid-linebreak-i-databas"
---

# Neat_trim... Preg_match bryts vid linebreak i databas

## #1 — niNe, 2011-05-27T12:03Z

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](http://www.justin-cook.com/wp/2006/06/27/php-trim-a-string-without-cutting-any-words/))

```php
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:

```php
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...

Permalänk: https://www.webforum.nu/p/187034

## #2 — Nate.A, 2011-05-30T10:04Z

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

Permalänk: https://www.webforum.nu/p/2276247

## #3 — niNe, 2011-05-31T13:34Z

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.

Permalänk: https://www.webforum.nu/p/2276299

## #4 — Nate.A, 2011-05-31T14:20Z

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:

```php
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;

	}
}
```

Permalänk: https://www.webforum.nu/p/2276300

## #5 — niNe, 2011-05-31T14:26Z

Funkar ju kalas! Kanontack!

Permalänk: https://www.webforum.nu/p/2276301

## #6 — Nate.A, 2011-05-31T18:32Z

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

Permalänk: https://www.webforum.nu/p/2276308

---

Tråden på webben: https://www.webforum.nu/amne/php/187034-neat-trim-preg-match-bryts-vid-linebreak-i-databas
