| 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: 16 let
|
|||
0