Návštěvní kniha v PHP bez použití databáze - ošetření textů
22. 02. 2001 | Michal Kebrt | PHP | Komentáře: 0
V minulém článku jsme si pověděli, jak vypisovat příspěvky po 20, jak změnit atributy souboru atd. Dnes přidáme několik dalších funkcí, které budou využívat regulární výrazy. Jedná se o dělení dlouhých slov, povolení některých tagů a automatickou detekci odkazů v textu zprávy.
Vzhledem k tomu, že soubor kniha.php3 se od minula v ničem podstatném nezměnil, připomeňme si pouze, že údaje získané z formuláře máme v těchto proměnných: jméno v proměnné $jmeno, e-mailovou adresu v $email, webovou adresu v $web a konečně text zprávy v $zprava.
Nyní se tedy můžeme pustit do souboru insert.php3. Nejprve odstraníme všechny nebezpečné znaky, které by mohly narušit formátování, a to pomocí funkce HTMLSpecialChars. Poté uložíme všechny údaje kromě textu zprávy do tabulky.
|
Následuje zpracování textu zprávy. Nejprve zabráníme tomu, aby se vkládaly příliš dlouhé příspěvky. K tomu použijeme funkci SubStr, která vrací část řetězce. První parametr určuje řetězec, druhý pozici prvního znaku a třetí počet znaků. V našem případě ukládáme prvních 1500 znaků. Poté odstraníme funkcí Trim všechny netisknutelné znaky (mezery, konce řádků, …) ze začátku a konce řetězce. Následuje odstranění nebezpečných znaků a nahrazení konců řádků tagy <BR>, což bylo popsáno v minulých dílech.
|
Nyní rozdělíme dlouhá slova a provedeme detekci odkazů, při čemž budeme využívat regulární výrazy a funkce pro práci s nimi, proto doporučuji předem přečíst tento článek. V proměnné $znak je uložen maximální počet znaků, které slovo může mít. Celý příspěvek nejprve rozdělíme na jednotlivá slova pomocí funkce Split. Následuje cyklus, který se provede přesně tolikrát, kolik je slov. V cyklu nejprve odstraníme pomocí funkce Trim všechny netisknutelné znaky z konce slova.
|
Nyní zjistíme, zda je slovo kratší než $znak, k čemuž použijeme funkci StrLen, která vrací délku řetězce. Pokud ano, mohou nastat tři možnosti - buď se jedná o odkaz začínající na 'www' nebo odkaz začínající na 'http://' a nebo obyčejné slovo, což bude asi nejčastěji. Detekci odkazu provedeme pomocí funkce EregI a regulárního výrazu '("^(www\..+\..{2,3})$', kterému vyhoví slova začínající na na 'www.', dále je nenulový počet libovolných znaků a na konci musí být '.' a národní doména ze 2 nebo 3 znaků. Celý odkaz musíme ještě vložit do tagu <a>, a to pomocí funkce EregI_Replace, která nahrazuje jeden řetězec druhým a při tom využívá regulárního výrazu. Obdobně postupujeme i v případě odkazu, který byl zapsán ve tvaru 'http://'. Jestliže se nejednalo o odkaz, bude obsah proměnné $odkaz totožný s původním slovem. Na závěr spojíme jednotlivá slova do celku a samozřejmě přidáme mezeru, aby slova byla oddělena.
|
Následuje druhá větev podmínky - slovo je delší než $znak. Nejprve si do proměnné $delit uložíme, na kolik částí slovo rozložíme. To provedeme tak, že délku slova vydělíme max. počtem znaků a zaokrouhlíme nahoru pomocí Ceil. V cyklu postupně rozdělujeme dlouhé slovo na části o délce $znak, a to pomocí funkce SubStr, která je popsána výše. Na konec každé části ještě přidáme pomlčku.
|
Jak povolit tagy <b> (tučné písmo) <u> (podtržené písmo) a <i> (kurziva)? Stačí, když znakové entity, které jsme vytvořili funkcí HTMLSpecialChars nyní převedeme na tagy. Vše provádíme funkcí Str_Replace, která nahrazuje jeden řetězec (první parametr) druhým řetězcem (druhý parametr) ve výchozím řetězci (třetí parametr).
|
Závěr je stejný jako v minulé verzi - zápis do souboru a přesměrování na kniha.php3, proto ho už nebudu nijak komentovat.
|
Jak se již stalo zvykem, celou aplikaci si můžete stáhnout zde. Pokud přijdete ještě na nějaké nedostatky nebo vylepšení, určitě napište do diskuse.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Další aktuální články na interval.cz
- Rychost, rychlost, rychlost - zrychlete své stránky
- Chamurappiho Webylon: čtyři články s kritikou W3C
- Nenápadný cloud: synchronizace dat z prohlížečů
- Pozvánka: Random Hacks of Kindness 2012
- Zajímavost o češtině pro redakční systém WordPress
Tematicky související články
- Návštěvní kniha v PHP bez použití databáze - základ aplikace
- Návštěvní kniha v PHP bez použití databáze - bezpečnostní mechanismy
- Diskusní fórum v PHP pro každého - zápis témat a příspěvků
- Online webtest v PHP bez použití databáze
- Diskusní fórum v PHP s využitím databáze - zpracování příspěvků
Dejte vědět i ostatním o článku
Diskuse (počet komentářů: 0)
Buďte prvním návštěvníkem, který přidá nový komentář.

