WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Användbar funktion (https://www.wn.se/forum/showthread.php?t=1042308)

robincox 2010-05-31 17:30

Användbar funktion
 
Tänkte bara dela med mig av en användbar funktion som jag precis skapat.

Denna funktion är användbar om du vill visa en preview av en lång text. Du kan själv bestämma längden på texten. Det fiffiga med den är att den rensar bort oönskade delar av texten som skulle förstöra din preview, t.ex. bilder, javaScripts eller html. Jag vet att jag enkelt hade kunnat använda mig av striptags() för den delen men det var roligare att skapa allt själv.

Så här fungerar den, byt ut $CPtext mot den långa text du vill skapa en preview av. Byt ut $CPLength mot önskat antal tecken som din preview ska bestå av.

Exempel:
echo cleanPeek($enstortext, 1000);

Nedan ser du funktionen:

function cleanPeek ($CPtext, $CPLength) {

$CPtext = htmlentities($CPtext);
$length = strlen($CPtext);
$stepper = 0;

for ($char=0;$char<=$length;$char++) {

if (substr($CPtext,$stepper,4) == '&lt;') {

$CPtext = substr_replace($CPtext,'',$stepper,4);
$mode = 'erase';

} else if (substr($CPtext,$stepper,4) == '&gt;') {

$CPtext = substr_replace($CPtext,'',$stepper,4);
$mode = 'read';


} else if ($mode == 'erase') {

$CPtext = substr_replace($CPtext,'',$stepper,1);

} else {

$stepper ++;

}

}

$CPtext = html_entity_decode($CPtext, ENT_QUOTES, "UTF-8");
$cleanPeek = substr($CPtext,0,$CPLength);
$cleanPeek = substr($cleanPeek,0,strrpos($cleanPeek,' '));

return $cleanPeek;

}

KarlRoos 2010-06-01 00:13

Då kan jag lika gärna bjuda på en kortare version för dem som inte behöver all funktionalitet:
Kod:

function excerpt($text, $maxchars) {
        $text                = substr($text, 0, $maxchars);
        $position        = strrpos($text, ' ');
       
        if($position > 0){
                $text = substr($text, 0, $position);
        }
       
    return $text;
}


robincox 2010-06-01 09:29

lägg till striptags() på $text i början av funktionen så har du fortfarande en kort funktion men som även tar bort bilder, html, javascript mm.

function excerpt($text, $maxchars) {
$text = strip_tags($text);
$text = substr($text, 0, $maxchars);
$position = strrpos($text, ' ');

if($position > 0){
$text = substr($text, 0, $position);
}

return $text;
}

nosnaj 2010-06-01 10:37

Sen är väl mb_substr att föredra då den klarar utf-8.

tartareandesire 2010-06-01 14:34

Citat:

Ursprungligen postat av nosnaj (Inlägg 20357642)
Sen är väl mb_substr att föredra då den klarar utf-8.

Jupps, multibytefunktionerna är bra att ha.

martine 2010-06-07 09:24

Nu har jag bara skummat igenom funktionerna men går det inte lika bra med bara:

preg_match('/^(.{1,1000})/ui',striptags(trim($txt)),$m)

Fungerar utmärkt med utf-8. Resultatet är i $m[1] för övrigt. Vill man dessutom inte klippa ord så kan man ju lägga till detta i regexp:et.

PS. Använd aldrig substr med strängar som kan vara i utf-8 eftersom den helt enkelt klipper tecknen i mitten och skapar korrupta strängar.

fabian 2010-06-07 11:04

Detta börjar likna codegolf :)


Alla tider är GMT +2. Klockan är nu 07:59.

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