
Vypsání části článku - problém - php
Zdarec. Mám uložené články v DB, které mají třeba i tisíce znaků. Tyto články obsahují klasické html tagy, protože se články vytváří pomocí WYSIWYG CKEditor.
Chci ovšem vypsat z např. 12 000 znaků jen 1000. Jak to mám ale udělat tak, aby se mi to nezastavilo třeba u
<img src="obra
? Nebo jak to mám obecně udělat?
Takto vypadá můj skript, který mi ovšem nefunguje:
<?php
function html_cut($text, $limit) {
$lenght = 0;
$tags = array();
for ($i = 0; $i < strlen($text) && $i < $limit; $i++) {
switch ($text[$i]) {
case '<':
$start = $i+1;
while ($i < strlen($text) && $text[$i] != '>' && !ctype_space($text[$i])) {
$i++;
}
$tag = substr($text, $start, $i-$start);
$in_quote = '"';
while ($i < strlen($text) && ($in_quote != '>' || $text[$i] != '>')) { #VŠE SE VYKONÁ ZDE
if (($text[$i] == '"' || $text[$i] == "'") && !$in_quote) {
$in_quote = $text[$i];
}
elseif ($in_quote == $text[$i]) {
$in_quote = '"';
}
$i++; # když tu dám echo $i, tak se vypíšou všechna čísla 1 - počet znaků
}
if ($text[$start] == '/') {
array_shift($tags);
}
elseif ($text[$i-1] != '/') {
array_unshift($tags, $tag);
}
break;
case '&':
$lenght++;
while ($i < strlen($text) && $text[$i] != ';') {
$i++;
}
break;
default:
while ($i + 1 < strlen($text) && ord($text[$i+1]) > 127 && ord($text[$i+1]) < 192) {
$i++;
}
}
}
$text = substr($text, 0, $i);
if ($tags) {
$text .= "</".implode("></", $tags).">";
}
return $text;
} #řádek 50
?>
a další odkazující se:
$limit = 150;
include "include/scripts/html_cut.php";
$a = html_cut($text, $limit);
echo $a;
PROBLÉMY:
- Vypisuje mi to chybu: Fatal error: Cannot redeclare html_cut() (previously declared in C:\xampp\htdocs\esport\include\scripts\html_cut.ph p:2) in C:\xampp\htdocs\esport\include\scripts\html_cut.ph p on line 50
- Nefunguje mi limit. Když dám limit třeba 50, i tak to přejde celý řetězec a u 50 znaků se nezastaví.
Po vykonání funkce má $i maximální hodnotu (tedy délka řetězce ve znacích + 1).
$lenght má hodnotu 0.
Vše se vykoná v cyklu while. (označen poznámkou), proč?
___________________
Jinak mě ještě napadlo, že by to šlo udělat normálně, že bych do sekce, kde se přidávají články, přidal ještě další textové pole, které by sloužilo pouze na psaní těchto krátkých ukázek, které by se tam poté vložily.
Za veškeré rady děkuji. A i kdybyste neměli řešení, tak bych rád aspoň zjistil, proč to nefunguje tak, jak chci. Děkuji
OK. Pravděpodobně to udělám přidáním dalšího pole.
Jinak ten skript měl dělat to, že si ukládat do zásobníku neuzavřené tagy, které posléze vypsal.
Sú v tom krátkom náhľade dôležité html tagy? Ak nie, tak celý tvoj skript môžeš nahradiť funkciou strip_tags, alebo sa s tým vyhrať cez preg_replace.
To mi došlo, ale kdyby tam byla třeba taková tabulka, tak by ten text moc smysl tedy nedával...
Koneckonců to dělám přes ten perex.
Mám tu pak problém s odkazem. Proč mi to nejde?
headline_url je zakódovaná jako url, ale v odkazu se tak neděje, proč?
to echo predtym ti nieco vypise?