Autor Zpráva
Ludek
Profil *
Řeším tady maximální délku znaků. Problém je v tom, že nyní počítám počet mezer, ale znaky mají různý počet znaků a tak vždy nedosáhnu přibližné délky v nadpisu. Prostě ... někdy je nadpis příliš krátký při stejném počtu mezer :(

Měl bych zřejmě počítat počet znaků a porovnávat to s počtem mezer? Bohužel nemám ponětí jak by takový script vypadal.
Najdu zde někdo, kdo mě poradí?

Aktuálně používám svou funkci:
function Popisek($text,$pocet) {
        if ($pocet == "") $pocet = "6"; else $pocet = $pocet;

        $clear = str_replace("\r\n"," ",strip_tags($text));
        $pocet_slov = explode(" ", $clear);
        
        foreach ($pocet_slov as $slovo)
        {
         if (strlen($slovo) >= "4") $p++;
         $vysledek .= $slovo." ";
         if ($p == $pocet) {$vysledek .=" ..."; break;}
        }
 return $vysledek;
}

$nadpis = Popisek($data, "7");
juriad
Profil
Nesnaž se o délku ve slovech, ale povol určitý počet znaků.
function popisek($text, $limit) {
  # strrpos najde poslední mezeru před limitem
  # substr vybere text od začátku po nalezenou mezeru
  return substr($text, 0, strrpos($text, ' ', $limit)) . "…";
}
Samozřejmě asi by to chtělo vylepšit, že pokud nalezená mezera je třeba před polovinou limitu, tak to má rovnou useknout, aby nadpis nebyl příliš krátký.
Nebo pokud nadpis neobsahuje mezeru vůbec, tak to bude fungovat podivně, to by chtělo ošetřit.

Číselné konstanty se nepíší do uvozovek. Také si rohlík nezabalíš do staniolu, než ho sníž.
Ludek
Profil *
Díky moc za radu. Nakonec jsem to vyřešil tímto způsobem, tak že kdyby to někdo potřeboval:

function Popisek($string,$length) {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n",$string);
    $string = array_shift($string) . "…";
  }

  return $string;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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