Autor Zpráva
Sylar
Profil
ZDravím, mám script na zkrácení stringu
function sub_string($arg, $brg) {
    $crg = strlen($arg);
    if ($crg > $brg) {
      $arg = mb_substr($arg, 0, $brg, "utf-8");
      $arg = $arg." ...";
    }
    return $arg;
  }


ale potřeboval bych do něj dodělat to, aby nechával dokončit slovo, když už překročí limit NEBO pokud by to bylo možné, aby skončil o slovo dříve pokud by už následujícím slovem limit překročil (chápete? :-))

nechci hotové řešení, jen popostrčit k výsledku / nějakou ideu mi hodně prosím :-)

Všem díky
Alphard
Profil
nechci hotové řešení, jen popostrčit k výsledku
udělejte to tak, jak to děláte teď, ale v oseknutém řetězci hledejte poslední mezeru (podíval bych se na funci strrpos()) a pak ještě jednou substr()
Majkl578
Profil
function sub_string($arg, $brg) {
    $crg = mb_strlen($arg);
    if ($crg > $brg) {
      $x = strrchr(mb_substr($arg, 0, $brg, 'utf-8'), ' ');
      $arg = mb_substr($arg, 0, $brg - mb_strlen($x, 'utf-8'), "utf-8");
      $arg .= " ...";
    }
    return $arg;
  }
Sylar
Profil
Alphard
Majkl578

Děkuji moc oboum ... jen ještě fce strrchr() mi tedy vrátí počet znaků od toho posledního nalezeného (co jsem zadal) do konce stringu, ano?
Ostatní je mi jasné :-)
Majkl578
Profil
strrchr vrati znaky ZA poslednim vyskytem daneho znaku
viz: http://cz.php.net/function.strrchr
Alphard
Profil
jen ještě fce strrchr() mi tedy vrátí počet znaků od toho posledního nalezeného (co jsem zadal) do konce stringu, ano?
ne ne, vrátí část řetězce, od posledního nalezeného znaku do konce, proto je tam ještě jednou mb_strlen
Majkl578 to udělal trochu jinak, než jsem navrhoval

// tak jsem to nestihl, možná kdybych hned odkázal manuál :-)
Majkl578
Profil
ted me napada, asi by tam melo byt jeste -1, aby se odstranila i ta mezera, takze takto:

function sub_string($arg, $brg) {
  $crg = mb_strlen($arg);
  if ($crg > $brg) {
    $x = strrchr(mb_substr($arg, 0, $brg, 'utf-8'), ' ');
    $arg = mb_substr($arg, 0, $brg - mb_strlen($x, 'utf-8') - 1, "utf-8");
    $arg .= " ...";
  }
  return $arg;
}


:)

Alphard: uz jsem mel pocit, ze prepisujes me odpovedi jinymi slovy :D
Darkweaver
Profil
<?php

$limit = 100;

$summary =<<<summary
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis lobortis cursus sem. Mauris nec sapien non nibh semper convallis. Sed at erat in orci imperdiet vehicula. Fusce id massa sit amet nisi congue pharetra.

summary;
if ( strlen($summary) > $limit ){
$summary = substr($summary, 0, strrpos(substr($summary, 0, $limit), ' ')) . '...';
echo $summary;
}
?>

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: