WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP klipper konstigt i text.... (https://www.wn.se/forum/showthread.php?t=35572)

grinditwp 2009-03-06 15:32

Har ett script som klipper ner text efter valt antal tecken....
Men det händer något skumt.

Text som går in:
Citat:


Det är med glädje vi kan konstatera att intresset varit stort för våra två träningsmatcher.

Ut:
Citat:

Det är med glädje vi kan konstatera att intresset varit stort för v�…
Så blir texten efter att jag "kortat ner" den.

Varför blir å istället �? (ser inte ut som här på forumet, det ser ut som en box, ni har säkert sett det)

Texten som går in är verkligen å inte å så det är inte därför.

Koden:
Kod:

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


martine 2009-03-06 16:06

Du använder nog utf-8 vilket är bra. PHP är däremot inte alltid lika klar i huvudet.

preg_match('/(.{' . $n . '}.*?)\b/u', $str, $matches);

Notera u:et i raden ovan. Vet dock inte om \b hanteras korrekt av php vid andra bokstäver än [a-z].

studiox 2009-03-06 16:53

Varför gör du inte en rtrim bara ?

martine 2009-03-06 20:15

Citat:

Originally posted by studiox@Mar 6 2009, 17:53
Varför gör du inte en rtrim bara ?
Exempelvis för att:

1. Det blir en himla massa tecken du måste ange att trimma bort,
2. rtrim är antagligen inte heller utf-8-medveten,
3. det går inte att trimma till ordgränser på något enkelt sätt

Regexp är väl utmärkta för just den här typen av uppgifter (koden i exemplet skulle förstås kunna kortas ner till en rad om man så vill).

FredrikMH 2009-03-07 13:29

eller utf8_decode()?

grinditwp 2009-03-09 08:51

Citat:

Ursprungligen postat av FredrikMH
eller utf8_decode()?


???

Vill iofs inte decoda utf8, vill "klippa" strängar till bestämd längd.

Citat:

Ursprungligen postat av martine
Du använder nog utf-8 vilket är bra. PHP är däremot inte alltid lika klar i huvudet.
preg_match(/(.{ . n . }.*?)b, str, matches);
Notera u:et i raden ovan. Vet dock inte om b hanteras korrekt av php vid andra bokstäver än [a-z].

Tack! Det fungerade....

Hittade också mer info så jag kan lära mig!
http://www.regular-expressions.info


Alla tider är GMT +2. Klockan är nu 16:16.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson