Autor | Zpráva | ||
---|---|---|---|
MikeCZ Profil |
#1 · Zasláno: 9. 12. 2009, 14:39:29
Ahoj.
Pomocí funkce substr() usekávám obsah řetězce, pokud je větší jak 1000 znaků... problém je v tom, že v tom obsahu jsou i tagy, konkrétně jen <a><br /><br> (ostatní parsuju, takže se tam nevyskytují) a v tom případě se někdy stane, že to useknu tak, že na konci je zbyde například "<br" a to dělá neplechu ve zbytku kódu... Tedy mělo by se to useknout za celým slovem a zároveň by to mělo být za ukončením párového tagu <a></a>, aby se nestale, že to usekne uprostřed a </a> už tam nebude... Díky za každou pomoc. |
||
Alphard Profil |
#2 · Zasláno: 9. 12. 2009, 14:51:41
|
||
MikeCZ Profil |
#3 · Zasláno: 9. 12. 2009, 18:13:39
Alphard:
„PHP triky - Zkrácení textu s XHTML značkami“ Díky, je tam tenhle kód, který opraví xhtml značky. Ale v něm už není kód, který zajišťuje, že text bude odřezán za celým slovem... // tenhle kód zajistuje, ze text bude useknut za celym slovem... $text = substr($text, 0, $limit+1); $pos = strrpos($text, " "); // v PHP 5 by se dal použít parametr offset echo substr($text, 0, ($pos ? $pos : -1)) . "..."; // tenhle opravuje xhtml /** Zkrácení textu s XHTML značkami * @param string zkracovaný řetězec bez komentářů a bloků skriptu * @param int požadovaný počet vrácených znaků * @return string zkrácený řetězec se správně uzavřenými značkami * @copyright Jakub Vrána, http://php.vrana.cz/ */ function xhtml_cut($s, $limit) { $length = 0; $tags = array(); // dosud neuzavřené značky for ($i=0; $i < strlen($s) && $length < $limit; $i++) { switch ($s[$i]) { case '<': // načtení značky $start = $i+1; while ($i < strlen($s) && $s[$i] != '>' && !ctype_space($s[$i])) { $i++; } $tag = substr($s, $start, $i - $start); // přeskočení případných atributů $in_quote = ''; while ($i < strlen($s) && ($in_quote || $s[$i] != '>')) { if (($s[$i] == '"' || $s[$i] == "'") && !$in_quote) { $in_quote = $s[$i]; } elseif ($in_quote == $s[$i]) { $in_quote = ''; } $i++; } if ($s[$start] == '/') { // uzavírací značka array_shift($tags); // v XHTML dokumentu musí být vždy uzavřena poslední neuzavřená značka } elseif ($s[$i-1] != '/') { // otevírací značka array_unshift($tags, $tag); } break; case '&': $length++; while ($i < strlen($s) && $s[$i] != ';') { $i++; } break; default: $length++; /* V případě kódování UTF-8: while ($i+1 < strlen($s) && ord($s[$i+1]) > 127 && ord($s[$i+1]) < 192) { $i++; } */ } } $s = substr($s, 0, $i); if ($tags) { $s .= "</" . implode("></", $tags) . ">"; } return $s; } |
||
MikeCZ Profil |
#4 · Zasláno: 9. 12. 2009, 18:28:21
Už to mám. Easy.
|
||
Časová prodleva: 14 let
|
0