V druhém pokračování našeho článku o vytvoření vlastní knihy návštěv pomocí ASP bez použití databáze, si ukážeme, jak ve výpisu příspěvku povolit pouze vybrané HTML tagy a jak udělat, aby si uživatel mohl text svého příspěvku zvýraznit vlastní barvou.

Na začátku se ještě vrátím k minulému článku, kde byla původně připojena funkční ukázka a kde bylo možné vyzkoušet, jak kniha návštěv funguje. Protože však zde nebylo však nezakázáno HTML (ukázka byla pro pochopení totožná s popisovaným článkem), jeden čtenář pomocí Javascriptu změnil výstup diskuse a proto byla ukázka ke článku stažena. U dnešního článku však již ukázka bude.

Zákaz provádění HTML tagů

Aby nám někdo nemohl dělat v naší aplikaci neplechu, zakážeme provádějí HTML tagů, čímž mu tuto záškodnickou práci fakticky znemožníme. Jde o to, že pokud nijak neodfiltrujete HTML tagy, uživatel je může vložit a ty se při zobrazení výpisu příspěvku provedou. Stačí tedy, aby uživatel vložit třeba několikrát tagy <Table><TR><TD>, které schválně neukončí, což spolehlivě zlikviduje vzhled stránky.

Funkce „tagy()“ nalezne HTML značky v textu a pokud nejsou povolené, tak je odstraní. Funkci „tagy()“ zavoláme z funkce „nahrentery()“ (viz. minulý článek) voláním „textik = tagy(textik)“ ještě před nahrazováním konců řádků. Jinak bychom si totiž smazali konce řádků (<br>), které jsme si nahradili.

<% function tagy(kde)
pocitadlo = 1     ‚nastavime pocitadlo na 1
Do While InStr(pocitadlo, kde,“<„, 1) <> 0     ‚smyčka dokud se v textu vyskytuje <
odpozice = (Instr(pocitadlo, kde,“<„, 1) + 1)     ‚najdeme zacatek tagu
dopozice = Instr(odpozice, kde,“>“, 1)     ‚najdeme konec tagu
if dopozice = 0 then dopozice = len(kde)+1 end if     ‚pokud nenalezneme konec tagu, vezmeme jako konec konec vloženého textu
tag = mid(kde,odpozice-1,(dopozice-odpozice+1))     ‚vezmeme si celý tag
covsechno = „<b></b><i></i><u></u><p></p>“     ‚seznam všech tagů, které chceme mít povolené
if InStr(1, covsechno,tag, 1) = 0 then     ‚pokud se tag v seznamu nevyskytuje
kde = replace(kde,tag,““)     ‚odstraníme tag
pocitadlo = dopozice-len(tag)+1     ‚nastavíme pocítadlo na výskyt < tagu, který jsme smazali
else
pocitadlo = dopozice+1     ‚posuneme počítadlo za výskyt konce tagové závorky
end if
loop
tagy = kde
end function
%>

V tuto chvíli umí aplikace odfiltrovat všechny HTML tagy kromě tagů pro tučný text (<b></b>), skloněný text (<i></i>), podtržený text (<u</u>) a nový odstavec (<p</p>). Seznam tagů, které chcete mít povolené, si samozřejmě můžete změnit.

Barevný text

Některým čtenářům se může líbit možnost vkládat příspěvky, které můžou mít barevně odlišeny od ostatnich. Pro barevné zvýraznění použijeme tyto značky: pro uvození strukturu {c-xxx} a pro zakončení {/c}. Řetězec xxx může představovat buď jméno barvy nebo její hexadecimální vyjádření #RRGGBB. Pro inspiraci – seznam bezpečných 216 barev, které lze bez obav použít na www stránkách, naleznete zde.

Tato funkce bude podobná té, kterou jsme použili pro nahrazování HTML značek. Nalezneme řetězec {c-barva} a nahradíme jej řetězcem <span style=’color: barva;‘> a poté ještě {/c} řetězcem </span>.

<%
function barva(kde)
pocitadlo = 1     ‚nastavime pocitadlo na 1
Do While InStr(pocitadlo, kde,“{c-„, 1) <> 0     ‚smyčka dokud se v textu vyskytuje {c-
odpozice = (Instr(pocitadlo, kde,“{c-„, 1) + 3)     ‚najdeme sekvenci {c-
dopozice = Instr(odpozice, kde,“}“, 1)     ‚najdeme konec
if dopozice = 0 then dopozice = len(kde) end if     ‚pokud nenalezneme konec řetězce, vezmeme jako konec konec vloženého textu
color = mid(kde,odpozice,(dopozice-odpozice))     ‚vezmeme si definici barvy
retez = „{c-“ + color + „}“     ‚sestavíme si celou definici barvy, jak byla zadána
kde = replace(kde,retez,“<span style=““color : „&color&“;““>“)     ‚nahradíme definici barvy adekvátním HTML kódem
pocitadlo = dopozice     ‚posuneme se na konec původního řetězce
loop
kde = replace(kde,“{/c}“,“</span>“)
barva = kde
end function
%>

Funkci barva(kde) zavoláme z funkce nahrentery() následujícím způsobem:

textik = barva(textik)

A výše uvedený řádek kódu vložíme za nahrazování HTML značek. Tím je celá část kódu sloužící pro vytvoření barevného textu hotova. Takto bychom mohli dnešní článek ukončit, ale pak jsem si uvědomil, že má naše aplikace má ještě dvě drobné chybičky. Pokud se ve vloženém textu objeví značka tabulátoru, může nám výpis příspěvku zkolabovat. To ošetříme jednoduchým nahrazení tabulátoru za čtyři mezery. Tuto řádku vložíme kamkoliv do funkce nahrentery().

textik = replace(textik,vbtab,“    „)

Druhá chybička je spíše kosmetická. Když totiž návštěvník nevyplní své jméno nebo e-mail, nevypadá to pěkně. To ošetříme jednoduchou funkcí:

<%
function kontrdelku(co)
if len(co) < 1 then
co = „nebylo zadáno“
end if
kontrdelku = co
end function
%>

Tuto funkci postupně zavoláme dvakrát, jednou pro jméno a jednou pro e-mail. Sestavení řetězce pro zápis do souboru bude potom vypadat takto:

retez = request.servervariables(„REMOTE_HOST“) & vbtab & request.servervariables(„HTTP_USER_AGENT“) & vbtab & cDateCzech(now) & vbtab & nahrentery(text) & vbtab & kontrdelku(jmeno) & vbtab & kontrdelku(email)

Kompletní zdrojové kódy si můžete stáhnout odtud.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět