FAQ |
Kalender |
2010-05-31, 17:30 | #1 | ||
|
|||
Flitig postare
|
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) == '<') { $CPtext = substr_replace($CPtext,'',$stepper,4); $mode = 'erase'; } else if (substr($CPtext,$stepper,4) == '>') { $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; } Senast redigerad av robincox den 2010-05-31 klockan 17:43 |
||
Svara med citat |
2010-06-01, 00:13 | #2 | ||
|
|||
Har WN som tidsfördriv
|
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; } |
||
Svara med citat |
2010-06-01, 09:29 | #3 | ||
|
|||
Flitig postare
|
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; } |
||
Svara med citat |
2010-06-01, 10:37 | #4 | ||
|
|||
Har WN som tidsfördriv
|
Sen är väl mb_substr att föredra då den klarar utf-8.
|
||
Svara med citat |
2010-06-01, 14:34 | #5 | ||
|
|||
Supermoderator
|
Jupps, multibytefunktionerna är bra att ha.
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2010-06-07, 09:24 | #6 | |||
|
||||
Mycket flitig postare
|
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. |
|||
Svara med citat |
2010-06-07, 11:04 | #7 | |||
|
||||
Klarade millennium-buggen
|
Detta börjar likna codegolf
|
|||
Svara med citat |
Svara |
|
|