Autor Zpráva
Mufna
Profil
Zdravím Vás. Řeším problém, že chci udělat funkci pro zkrácení textového řetězce a zároveň chci, aby se nezkrátilo poslední slovo (čili aby poslední slovo zůstalo celé). Jak byste to řešili ? Zatím mám zkracování textových řetězců udělané takto:

  $zkraceny_text = mb_substr($str,'0','130','UTF-8');
  $zkraceny_text.= '...';
Keeehi
Profil
Pomocí mb-strrpos si vyhledej poslední mezeru.
Kalby
Profil
podle me bys mel najit posledni mezeru pomoci strpos a za ni to useknout

EDIT: tak pozde
__construct
Profil
V miestnom PHP FAQ je odkaz na článok od Jakub Vrány - pozri si ho…
Mufna
Profil
Díky všem. Vyřešil jsem to takto (jen nevím, jestli to není moc krkolomný a zbytečně dlouhý, no jinak mě to nenapadlo).

  $zkraceny_text = mb_substr($puvodni_text,'0','130','UTF-8');
  $str_end = mb_strrpos($zkraceny_text," ",'100','UTF-8');
  $zkraceny_text = mb_substr($zkraceny_text,'0',$str_end,'UTF-8');
  $zkraceny_text.= '...';


Funguje to bezvadně. Ten OFFSET s hodnotou 100 u druhého řádku a funkce mb_strrpos() jsem dal od oka ... slovo delší než 30 znaků se mi snad nikde vyskytovat nebude, takže to můžu začít klidně zkoumat až od 100. znaku.
tatyalien
Profil
Trochu opravené z vlákna: Odkaz


function perex($text, $length = 5, $ending = "...") {
    // ořízne řetězec na zadaný počet znaků
    $text  = mb_substr($text, 0, $length);
    // poslední výskyt mezery
    $pos   = mb_strrpos($text, " ");
    // oříznutí řetězce
    $text  = mb_substr($text, 0, $pos);
    // dodání koncovky
    $text .= $ending;
    return $text;

}
$vstup = "1 3 5 7 9 1 3 5 7 9 1 3";
echo "Vstup: $vstup<br>";
echo perex($vstup, 20);

/*
Výsledek:
Vstup: 1 3 5 7 9 1 3 5 7 9 1 3
1 3 5 7 9 1 3 5 7 9...
*/

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0