Autor Zpráva
eliška
Profil *
Ahoj mám takovouto funkci, na zkracování textu. Když chci zkrátit text, tak mi to počítá i znaky html kódu (strong, a href atd.), tak jak je mám uloženy v databázi.
Např. <strong><a href="[rooturl]/recepty?f=razeni:2-druh:11" title="recepty do kuchyne" class="a_acronym">Rychlá jídla</a></strong> další text...
Funkce spočte zřejmě všechny znaky včetně <> a jejich obsahu a já bych potřebovala aby to počítalo jenom ten text Rychlá jídla + další text atd., protože jinak když dám omezení třeba na 250 znaků, tak pak vidím jenom dvě slova (zbytek je html a to se nezobrazuje ale započítává do funkce)

function substr_unicode($str, $s, $l = null) {
     return join("", array_slice(
         preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
 }
function zkratit($retezec, $znaku) {
   if(strlen($retezec)>$znaku){
    $retezec=substr_unicode($retezec, 0, $znaku-2)."..";
   }
  return $retezec;

Děkuji moc za radu a pomoc
Alphard
Profil
Ty značky by se měly i ukončit, ne to jen useknout, viz Moved Permanently.
eliška
Profil *
Promiňte nerozumím, tuto funkci mi dělal kamarád. Co myslíte useknutím? Já myslela přidat podmínku aby to co je mezi <> se nepočítalo do té délky řetězce. To je špatná myšlenka?
Chro.
Profil
Text lze před zpracováním ostatními funkcemi zbavit html značek funkcí strip_tags(), stačí ji vhodně zakomponovat do kódu.
function zkratit($retezec, $znaku) {
$retezec = strip_tags($retezec);
Tomášeek
Profil
Chro.:
Hm... a jak pak do výstupu zpětně naroubuješ původní HTML? Pokud tedy neberu, že HTML formát je jen značka odstavce na začátku a na konci, ale nějaká komplexnější struktura.
Chro.
Profil
V kódu [#1] je "..", soudím, že slečna/paní potřebuje upravit html článku z DB na prostý text (a ten ořezat), který se pak na stránce zobrazí jako perex.
eliška
Profil *
Jde mi o to aby se mi na stránce text zobrazil v délce např. 250 znaků ale aby v něm byli odkazy a zvýraznění, která tam sice teď jsou ale text se nezobrazí v té délce 250 znaků, protože to bere v potaz to html<>
Tomášeek
Profil
Chro.:
Myslím, že soudíš špatně. Navíc, i v perexu může být ponechané (nějaké) formátování, typicky odřádkování, seznam, nebo kurzíva/bold.
eliška
Profil *
Chro. [#4]: Toto mi právě odstraní Html jako takové a pak se mi nevypisuji odkazy a zvýraznění. Což ale nechci, já potřebuji aby to bylo s těmi odkazy, ale celých 250 znaků


Nešla by funkce, která by počítala znaky, ale ty co jsou v <ohraničeni html> by nebrala v potaz? To by to mohlo vyřešit ne?
TomášK.
Profil *
eliška:
Problém je v tom, že nemůžeš text jen tak useknout po 250 znacích textu. Přiklad:
<strong>Nějaký text</strong> s  <a href='#'>odkazem</a>, který je potřeba zkrátit.
nelze zkrátit na
<strong>Nějaký text</strong> s  <a href='#'>odkaz…
Musíš dodržet uzavírací tag, jinak všechno za tím bude bráno jako odkaz. Správně tedy potřebuješ
<strong>Nějaký text</strong> s  <a href='#'>odkaz…</a>

Idea počítat jen znaky textu je dobrá, ale pokud text obsahuje HTML, potřebuješ složitější funkci než tu, kterou máš - takovou, která dokáže pracovat i s tím HTML. Viz Truncate text containing HTML, ignoring tags
eliška
Profil *
Tak to asi nedám...Ale asi toto přesně potřebuji.
Monkeys
Profil *
A co tak pouzit css text-overflow elipsis, miesto vymyslat s php.
M.
Keeehi
Profil
eliška:
Tak to asi nedám...Ale asi toto přesně potřebuji.
Ale v tom odkazu máš i řešení. Tak ho stačí jen zkopírovat. Vo na tom nedáš?

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:

0