Zadejte hledaný výraz...

Useknout kus HTML kódu, ošetřit a správně uzavřít tagy

crs
verified
rating uzivatele
(1 hodnocení)
28. 7. 2019 02:12:46
Zdravím.
Řeším následující problém: dostanu kus HTML kódu, který mám za úkol zleva oříznout, tj. získat z něj prvních např. X znaků textu (ne kódu) a zobrazit ho (a přilepit za něj "...", pokud to pokračuje).
Dané HTML většinou otevírá několik divů a paragrafů, spanů atd., pak teprve následuje nějaký text.
Zajímá mě, jak (pokud možno jednoduše, efektivně, elegantně) tento kód ošetřit tak, aby:
- všechny otevřené tagy (v okamžiku dosažení limitu) byly ve správném pořadí zavřeny
- v případě, že je kód uříznut uprostřed tagu nebo html entity, nebyly vypsány
Napadají mě spatra nějaká řešení...
- získat z kódu regexem i s pozicemi všechny tagy a tak to procházet
- přistupovat k html v DOMu, do kterého ho nejdřív převedu
...ale přijde mi to jako problém, který téměř určitě někdo přede mnou už musel řešit, a tak se ptám, pokud to vyřešil, jak se k takovému řešení dostanu.
Díky moc.
28. 7. 2019 02:12:46
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410082
Pavel Mareš
verified
rating uzivatele
(19 hodnocení)
28. 7. 2019 07:32:22
Jako chtělo by to znát kontext. Napadá mě víc věcí a nedokážu si to 100% představit. Můžeš dát přímou ukázku?
28. 7. 2019 07:32:22
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410081
A potrebujes vubec ten html kod, kdyz mas vytahovat text a dopsat ... ?
Pak by stacilo totiz odstranit vsechny html tagy a text ti vyleze sam (https://php.net/strip-tags), ten oriznes a je to.
28. 7. 2019 09:59:15
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410080
qye
verified
rating uzivatele
(17 hodnocení)
28. 7. 2019 10:01:56
28. 7. 2019 10:01:56
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410079
Pavel Mareš
verified
rating uzivatele
(19 hodnocení)
28. 7. 2019 10:03:46
Tak pokud nepotřebuje html je to snadný. Ale já to pochopil tak že to html potřebuje.
28. 7. 2019 10:03:46
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410078
Petr Hejda
verified
rating uzivatele
(5 hodnocení)
28. 7. 2019 10:19:45
Když generuješ za část textu tři tečky, předpokládám, že to bude pro zobrazení na frontendu.
Nemůžeš to řešit přes CSS (text-overflow: ellipsis;)? Tím by ses vyhnul té potřebě řešit uzavírání useknutých HTML tagů.
Případně tady v té Stackoverflow odpovědi jsou odkazy na funkční víceřádkové řešení - https://stackoverflow.com/a/33061059/1693192 (ať už přes čisté CSS nebo přes JS pluginy).
28. 7. 2019 10:19:45
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410077
qye
verified
rating uzivatele
(17 hodnocení)
28. 7. 2019 10:22:43
Napsal Doctore97;1537517
Tak pokud nepotřebuje html je to snadný. Ale já to pochopil tak že to html potřebuje.
GitHub - dhngoc/php-cut-html-string: PHP Cut HTML String with limit character
28. 7. 2019 10:22:43
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410076
Pavel Mareš
verified
rating uzivatele
(19 hodnocení)
28. 7. 2019 12:10:48
Napsal qye;1537521
GitHub - dhngoc/php-cut-html-string: PHP Cut HTML String with limit character
nice, neznal jsem, díky
Napsal Petr Hejda;1537520
Když generuješ za část textu tři tečky, předpokládám, že to bude pro zobrazení na frontendu.
Nemůžeš to řešit přes CSS (text-overflow: ellipsis;)? Tím by ses vyhnul té potřebě řešit uzavírání useknutých HTML tagů.
Případně tady v té Stackoverflow odpovědi jsou odkazy na funkční víceřádkové řešení - https://stackoverflow.com/a/33061059/1693192 (ať už přes čisté CSS nebo přes JS pluginy).
Elipsis je k ničemu. Musíš znát přesný rozměry, v praxi jsem to párkrát zkoušel, ale je to nepoužitelný. Pokud fakt potřebuje jen čistý text, tak jak psali výše - strip_tags a ddoat mezeru s třema tečkama (resp výpoustkou).
28. 7. 2019 12:10:48
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410075
crs
verified
rating uzivatele
(1 hodnocení)
28. 7. 2019 20:50:03
Díky moc všem za odpovědi.
@Doctore97: Můžeš dát přímou ukázku?
Příklad:
zkrácený na 20 znaků textu bude:
Nebo, alternativně, i bez té poslední entity. (Indentace může být zachována či nemusí.)
@Petr Hejda: text-overflow:ellipsis;
I v daném odkazu na Stack Overflow výpustka funguje jen pro první řádek.
@qye: GitHub - dhngoc/php-cut-html-string
Také jsem neznal - kouknu na to. Vypadá to, že by to mohlo být přesně to, co chci.
(Letmým zkouknutím kódu to vypadá, že to autor řeší přes regulární výrazy)
28. 7. 2019 20:50:03
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410074
skorozacatecnik
verified
rating uzivatele
28. 7. 2019 21:51:01
Zkracovat HTML/XML jde pomocí DOMDocumentu, do kterého se naloaduje useknuté html a ignoruji se interní chyby. DOMDocument uzavře tagy a výstup je pak validní. Validuju tak HTML content z editoru v CMS. Pokud je třeba zkrátit texty, pak se jen projedou txt nody, které se ořežou.
28. 7. 2019 21:51:01
https://webtrh.cz/diskuse/useknout-kus-html-kodu-osetrit-a-spravne-uzavrit-tagy/#reply1410073
Pro odpověď se přihlašte.
Přihlásit