T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
16th April

Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8

Ko sem pregledoval PHP skripto starejšega datuma sem opazil kratko in preprosto funkcijo, ki skrbi da tekst odrežemo po koncu besede in ne na sredini besede. Rezultat je veliko lepši izpis.

PHP koda:
[php]
function cutText($string, $length, $delimiter = ‘ ‘, $postfix = ‘ …’) {
if($length < strlen($string) and strpos($string, $delimiter) !== false){
while ($string{$length} != $delimiter) {
$length--;
}
return substr($string, 0, $length).$postfix;
}

return $string;
}
[/php]

Mogoče bo komu v pomoč. Popravljena funkcija za UTF-8 stringe:
[php]
function mbCutText($string, $length, $delimiter = ‘ ‘, $postfix = ‘ …’) {
$stringLength = mb_strlen($string, ‘UTF-8′);

if($length < $stringLength and mb_strpos($string, $delimiter, null, 'UTF-8') !== false){
while (mb_substr($string, $stringLength-1, $stringLength, 'UTF-8') != $delimiter) {
$stringLength--;
}

return mb_substr($string, 0, $stringLength, 'UTF-8').$postfix;
}

return $string;
}
[/php]

Primer uporabe – UTF-8 – multibye:
[php]
header(‘Content-Type: text/html; charset=utf-8′);
$test = ‘蚞ȊŽab10 šaaaaabbb';
echo mbCutText($test, 10);
[/php]

Pri mbCutText uporabimo mb_substr saj nam $string[index] vrne napačne rezultate, ker je recimo č šumnik večbajtni UTF-8 znak. Prvotni avtor te funkcije je joao.martins@plako.net.


9x komentirano na “Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8”

  1. Boštjan je napisal:

    A zato sm meu jst probleme pr zgornji funkciji :) (sm jo sicer sam napisu)

  2. Roky je napisal:

    Ja, echo $string[1], vrne ?, ker je dobu sam prvi byte znaka.

    Tut jest sem mislu da sem sam napisov sam ko sem mal pogledov na php.net, sem vidu da ma eden skorej isto tko da se mi zazdel da sem njegovo kodo uporabu za začetek:)

  3. Boštjan je napisal:

    Narobe je uglaunem vrnila funkcija – pa ni bla točno ta ki je zgoraj, ker je nism poslal na php.net ;)

  4. Carli je napisal:

    O tem se že pisal nekje, čeprav je šlo samo za to, da se iz besede odreže prve 3 črke in naredi prvo uppercase. No vse lepo in prav, dokler ne pridemo do multibyte črke.

    Šlo je za to:

    $text = mb_substr("človek",0,3);
    $text[0] = mb_strtoupper($text[0], "UTF-8");

    Škoda teh funkcij zaradi čžš … :D

  5. Roky je napisal:

    Ja, isti problem ker so byti po indexah in pol narobe ven dobi ..

  6. PHP - pretvori prvo črko v veliko črko - UTF8 podpora (ucfirst, ucwords, mb_convert_case) | .: TRSplet - internetne storitve .: je napisal:

    [...] Kot veste php funkciji ucfirst in ucwords ne delujeta pravilno, če imamo v tekstu posebne znake (kot naprimer šumniki (č,š,ž) v UTF8 formatu). Podobne težave nastopijo tudi pri ostalih funkcijah, naprimer substr ter strtolower. [...]

  7. PHP - delo z UTF-8 stringi oz. podatki - težave s šumniki (č,š,ž) | .: TRSplet - internetne storitve .: je napisal:

    [...] cuttext, substr [...]

  8. G.V. je napisal:

    Jaz uporabljam tole:

    [php]
    function cutText($text=””, $length=15) {
    $words = explode(‘ ‘, $text, $length + 1);
    if (count($words) > $length) {
    array_pop($words);
    array_push($words, ‘…’);
    $text = implode(‘ ‘, $words);
    }
    return $text;
    }
    [/php]

  9. Roky je napisal:

    Dobra rešitev, mogoče celo boljša!

Dodaj komentar

You must be logged in to post a comment.