Autor | Zpráva | ||
---|---|---|---|
perwin Profil |
#1 · Zasláno: 6. 1. 2011, 19:03:31
Ahoj,
potřeboval bych script, který vypíše tři tečky (...) po určitém počtu slov. Děkuji |
||
Taps Profil |
#2 · Zasláno: 6. 1. 2011, 19:13:24
|
||
perwin Profil |
#3 · Zasláno: 6. 1. 2011, 20:14:08 · Upravil/a: perwin
Taps:
Našel jsem toto: <?php if (strlen($text) <= $limit) { echo $text; } else { $text = substr($text, 0, $limit+1); $pos = strrpos($text, ""); echo substr($text, 0, ($pos ? $pos : -1)) . "..."; } ?> Nojo ale kde je ten text, co se bude krátit a kam ho mam vložit? A kde se nastavuje po kolika znacích (slovech) se zkrátí? Díky |
||
Keeehi Profil |
#4 · Zasláno: 6. 1. 2011, 20:17:22
perwin:
Že by v proměnné $text byl ten text a v proměnné $limit ta délka? Pozor! Tento script krátí podle počtu písmen, ne slov. |
||
perwin Profil |
#5 · Zasláno: 6. 1. 2011, 20:26:00
Keeehi:
„Že by v proměnné $text byl ten text a v proměnné $limit ta délka?“ Toto: <?php if (strlen($text) <= $limit) { echo $text; } else { $text = substr($text, 0 /* počet písmen po kterém se bude krátit */, $limit+1); $pos = strrpos($text, "text, který se bude krátit"); echo substr($text, 0, ($pos ? $pos : -1)) . "..."; } ?> „Pozor! Tento script krátí podle počtu písmen, ne slov.“ Ale tam není žádný script, který by krátil text podle počtu slov. Prosím poraďte. Dík |
||
Keeehi Profil |
#6 · Zasláno: 6. 1. 2011, 20:34:52
K přemýšlení by tě bylo těžké dohnat, takže tady máš řešení:
<?php $text = "tvůj text ke zkrácení"; $limit = 100; //počet písmen; if (strlen($text) <= $limit) { echo $text; } else { $text = substr($text, 0, $limit+1); $pos = strrpos($text, " "); echo substr($text, 0, ($pos ? $pos : -1)) . "…"; } ?> A začni se učit. |
||
joe Profil |
#7 · Zasláno: 7. 1. 2011, 00:08:33
Myslím, že v dnešní době by mohlo stačit toto.
|
||
kubik Profil |
#8 · Zasláno: 8. 1. 2011, 09:58:39
$pole = Split(" ", $text_puvodni, $limit + 1); $pole[$limit] = ""; $text_zkraceny = Implode($pole, " ")."…"; V $limit je počet slov, na který se zkracuje ten text. Předpokladem je, že oddělovačem slov je mezera, jinak by se musel upravit první parametr funkce Split(). |
||
imploder Profil |
#9 · Zasláno: 8. 1. 2011, 22:17:34 · Upravil/a: imploder
Nikdo tady zatím použitelné řešení nenabídl ani nepopsal, takže tady je moje. Dá se bez obav použít i na velmi dlouhý text, protože pracuje jen se začátkem (tj. jen to, co se má vypsat). Do $znaky_predelu je možné přidat i jiné bílé znaky, které se můžou v textu vyskytnout (např. tabulátor).
<?php header('Content-Type: text/plain; charset=utf-8'); // začátek textu (prvních n slov) + "..." function zacatek($text, $n) { // znaky, kterými můžou být oddělena slova; // cokoliv jiného se považuje za součást slova $znaky_predelu = " \n"; $delka_textu = strlen($text); $delka = 0; for ($slov = 0; $slov < $n; $slov++) { // pokud za předělem už nic není, skonči; // jinak vyber text do konce předělu $tmp_delka = $delka; $tmp_delka += strspn($text, $znaky_predelu, $delka); if ($tmp_delka == $delka_textu) break; else $delka = $tmp_delka; // vyber text do konce slova $delka += strcspn($text, $znaky_predelu, $delka); // pokud za slovem už nic není, skonči if ($delka == $delka_textu) break; } $zacatek = substr($text, 0, $delka) . (($delka < $delka_textu) ? '...' : ''); return $zacatek; } $text = 'Našel to dědeček, našel to v lese. Napích to na klacík, domů to nese. Babička myslela, že jsou to houby, dala to na pekáč, šup s tím do trouby. Děti to sežraly, pak byly zticha, protože dostali bolení břicha. "Dědečku ty jsi vůl, není ti rovno, vždyť jsi přinesl místo hub ********!!!"'; echo zacatek($text, 9); ?> EDIT: opravil jsem to tak, aby se při vybrání celého textu za něj tři tečky nepřipojovaly |
||
Časová prodleva: 7 dní
|
|||
perwin Profil |
#10 · Zasláno: 15. 1. 2011, 16:22:01
Nojo, ale co když chci, aby se mi neořízli i HTML značky? třeba když je v textu z db: <a href="web.php">text</a> a vypsalo by se mi <a hr... - tak to je problém... našel jsem tento script:
<?php function orizni_html($s, $limit){ static $empty_tags = array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'); $length = 0; $tags = array(); // dosud neuzavřené značky if(strlen($s) > $limit){ $tri_tecky = "..."; } else { $tri_tecky = ""; } 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 = strtolower(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 $tags = array_slice($tags, array_search(substr($tag, 1), $tags) + 1); } elseif ($s{$i-1} != '/' && !in_array($tag, $empty_tags)) { // otevírací značka array_unshift($tags, $tag); } break; case '&': $length++; while ($i < strlen($s) && $s{$i} != ';') { $i++; } break; default: $length++; } } $s = substr($s, 0, $i); $s .= $tri_tecky; if ($tags) { $s .= "</" . implode("></", $tags) . ">"; } return $s; } ?> A počítám s tím, že $s je text, který se má oříznout a $limit je max. počet písmen. Jenže napíše mi to: Fatal error: Cannot redeclare orizni_html() (previously declared in /home/users/perwin/web.cz/web/zobraznovinky.php:18) in /home/users/perwin/web.cz/web/zobraznovinky.php on line 18 A na řádku 18 je: function orizni_html($s, $limit){ Prosím poraďte mi, co s tím. Děkuji |
||
Marek88 Profil |
#11 · Zasláno: 15. 1. 2011, 21:34:26 · Upravil/a: Marek88
perwin:
Cannot redeclare orizni_html() (previously declared in /home/users/perwin/web.cz/web/zobraznovinky.php:18) in /home/users/perwin/web.cz/web/zobraznovinky.php on line 18 Nelze znovu delkarovat funkci orizni_html() na řádku 18. (funkce již byla deklarována v /home/users/perwin/web.cz/web/zobraznovinky.php na řádku 18) Nemáš to, co jsi sem poslal třeba v cyklu? |
||
perwin Profil |
#12 · Zasláno: 16. 1. 2011, 12:34:31 · Upravil/a: perwin
Marek88:
Jak v cyklu? |
||
perwin Profil |
#13 · Zasláno: 16. 1. 2011, 15:09:19
Marek88:
Myslíš v cyklu while { } ? Ano, mám. |
||
xmark Profil |
#14 · Zasláno: 16. 1. 2011, 15:10:52
perwin:
Tak to z něj vytáhni. |
||
perwin Profil |
#15 · Zasláno: 16. 1. 2011, 15:13:59 · Upravil/a: perwin
xmark:
Ale to nemohu. Ten zařizuje, aby se vypisovali všechny výsledky z db pomocí předlohy: while($Vysledek = mysql_fetch_array($query)) { echo " ".$Vysledek['blablabla']." "; } |
||
xmark Profil |
#16 · Zasláno: 16. 1. 2011, 15:16:50
perwin:
Pokoušíš se opakovaně definovat funkci. Funkci můžeš volat kolikrát chceš, ale definovat ji můžeš jen jednou. Čemu na tom nerozumíš? |
||
perwin Profil |
#17 · Zasláno: 16. 1. 2011, 15:18:54
xmark:
Aha takže to co jsem poslal v [#10] dám mimo while a echo $s; dám do while? |
||
Časová prodleva: 13 let
|
0