V prvním článku jsme si ukázali jak vkládat tagy do textarey pomoci JavaScriptu a nyní si ukážeme jak se s nimi vypořádat aniž by docházelo ke kříženi či neukončení tagu.
Následující scripty vkládejte mezi výpis z databáze nebo do zvláštního souboru, který includujte. Takže výpis bude vypadat například takto:
$cist_mysql = mysql_query("SELECT * FROM tabulka ORDER BY id DESC LIMIT 0,10"); while($cist = mysql_fetch_array($cist_mysql)) { require("./formatovani.php"); echo $cist['text']; }
Jako první jsme si ukázali vkládaní smajlíků typu :-), :-(, … takže do formatovani.php vložte:
$smajlici = array(":-)", ":-(", ":-D", ";-)"); $prevod = array( '<img src="1.gif" alt="smajlík" align="middle" />', '<img src="2.gif" alt="smajlík" align="middle" />', '<img src="3.gif" alt="smajlík" align="middle" />', '<img src="4.gif" alt="smajlík" align="middle" />' ); /* atd. */ $cist['text'] = str_replace($smajlici, $prevod, $cist['text']);
Jako druhé byli tagy tapu [b], [i], [s], … takže si do formatovani.php vložte:
$cist['text'] = preg_replace("'\[b\]([^\[\]<>]+)\[\/b\]'si", "<strong>$1</strong>", $cist['text']); $cist['text'] = preg_replace("'\[i\]([^\[\]<>]+)\[\/i\]'si", "<em>$1</em>", $cist['text']); $cist['text'] = preg_replace("'\[s\]([^\[\]<>]+)\[\/s\]'si", "<del>$1</del>", $cist['text']); /* a další */
Tyto příkazy nepřevedou samostatné tagy ani křížené tagy, takže mezi [b] nesmí přijít [, ], < a >. A zatřetí jsme si ukázali vkládaní obrázků a odkazů, takže si do formatovani.php vložte:
$cist['text'] = preg_replace('/\[img=(http:\/\/[^ \]\[<>]+\.(gif|jpe?g|png))\]([^\[\]<>]+)\[\/img\]/', "<img src=\"$1\" alt=\"$3\" title=\"$3\" />", $cist['text']); $cist['text'] = preg_replace('/\[url=((https?|ftp):\/\/([^\[\]<>]+))\]([^\[\]<>]+)\[\/url\]/', "<a href=\"$1\">$4</a>", $cist['text']); /* Případně další varianty */
A tím jsme u konce formátování. Náhled celého díla najdete zde.
Štítky:
JavaScript,
tutoriál,
zobrazit všechny štítky
! Našli jste v článku gramatické či pravopisné chyby? Je to z důvodu autorovy nemoci zvané dysgrafie. Tudíž všem děkuji za pochopení a každý článek pokud možno nechávám projít korekturou. !
No, musím ti říct, díky za článek, přesně tohle jsem hledal konkrétně ošetření neuzavřených formátovacích značek , ale co se týče například převodu smajlů, tak bych to možná vyřešil jedním polem, namísto dvou…
Mike: Omlouvám se, že jsem ti upravil příspěvek, ale vypadal šíleně. Příště použij formátování [code]. Jinak je pravda, že by i bylo lepší použit jen jedno pole typu:
$smajlici = array(":-)" => "<img src="1.gif\" alt=\"smajlík\" align=\"middle\" />");než tohle, ale to je jen maličkost.
v poho musím ale říct, že formátování jsem si prvně nevšiml… tak jedna šipečka je trochu matoucí…
btw proč všichni tak rádi escapujou uvozovky? *17* já tedy escapuju pouze pokud je to nezbytně nutné, a jinak jen v regexp, popřípadě když echuju javascript…
Mike: To bude tím, že to pravě dělají všichni.
Teď jsem koukal na tvůj web a zase vidím, že máš špatně udělané české uvozovky.
#-cisla
Do kódu nepatří
Máš [EN uvozovka]text[CZ uvozovka zacatek]<br>[CZ uvozovka konec]text[EN uvozovka]…
#
Crazydog: no já si myslím, že jednoduché úvozovky v html ničemu nevadí… pár názorů jsem na to četl, a podle mě je to fuk… Snad jen DTD musí být ve dvojtých (myslím). Jednoduché v html mám právě tam, kde je kód přímo echován, protože echování v jednoduchých se chová trochu jinak.
pokud teda myslíš tohle. pokud ne, tak sem tě asi nepochopil…
ano, používám oboje, a pokud uvozovky vnořuji, tak vnořuji dvojté do jednoduchých nebo jednoduché do dvojitých, právě proto, abych je nemusel escapovat.
XSS……Použijte u toho funkci htmlspecialchars();….
Scary: Tobě to snad nefunguje?
No já to celé zkopčil a nic
Já chci jen smajlíky do Návštěvní knihhy udělat a Jak e snžím tak se snažím a nic ,,
Scary: V příkladu je to taky okopírované z článku a vše funguje. Někde děláš chybu. Zkus si to ještě jednou přečíst. Možná máš chybu v proměnné.
A dá se tenhle příklad uvést i di Návštěví knihy ?
Protoze kazdy script co jsme nasel na netu to jen se sice objevilil smajliky ale nebylo tam proste jak je tu v navstevni knize u tebe
Scary: Tohle je jen příklad jak převádět smajlíky, které uložíš například v návštěvní knize, tak když napíšeš do příspěvku :-) tak se převede na obrázkového smajlíka. Jestli potřebuješ smajlíky na které když klikneš aby se objevil tam kde píšeš, tak to je popsané v článku vkládání do textarey.
Já chápu ale proste jak je treba na prikladu no tak ono se to pak smaze neboco protoze neco pridas a pak pridas druhy a ono to je jen to jedno a ne vsechny co jsi napsal ,,, Rikam , ze to potrebuji na navstevni knu ale me se to nechce prevadet ja to uz zkousel kolikrat ,,, Normal dam selecta atd… jenze se mi to vypise jako text i kdyz je tam prevod smailíků
Scary: Ten příklad nikde nic neukládá. To je jen náhled. Tam kde máš:
while(blabla) { a tady dej formatovani, ktere prevadi smajliky tady se ctou prispecky }Spiš máš špatné proměnné, když čteš příspěvek třeba přes proměnnou echo $cist['text']; tak musí být v
$cist['text'] = str_replace($smajlici, $prevod, $cist['text']);mít $cist['text'] chápeš?
CrazyDog Pls das mi tvoje ICQ ?
Scary: Nemám. Jen MSN a Jabber a najdeš je v sekci webmaster.
Ok ja si te doma pridam na MSN *19*
Sorry ale to si delas srandu? Takže když v db bude 20 řádků tak 20x budeš nahrávat jeden soubor? Ty chceš ten hosting znčit co? Nebylo by nahodou jednoduzsi to dat jako funci?
while($cist = mysql_fetch_array($cist_mysql)) { require("./formatovani.php"); echo $cist['text']; }