17. diel - Fonetickej funkcie a kódovanie HTML entít v PHP
V minulej lekcii, Hashovanie textových reťazcov , sme sa dozvedeli, ako Hashovať textové reťazce v PHP.
V dnešnej lekcii si ukážeme použitie funkcií metaphone()
,
soundex()
, htmlentities()
ak nej aj opačnú funkciu
html_entity_decode()
.
metaphone()
Funkcia metaphone()
vypočíta kľúč textového reťazca.
Taký kľúč nám ukazuje, ako by daný textový reťazec vyslovil anglicky
hovoriaci človek. Metaphone je fonetický algoritmus pre
indexovanie slov s anglickou výslovnosťou, reťazec je teda zakódovaný do
už spomínaného kľúča. Takýto algoritmus je možné použiť pre rôzne
aplikácie zaoberajúce sa napríklad vyhláskovaním. Metaphone je podobný
fonetickému algoritmu Soundex, avšak je viac presnejšie čo
sa týka pravidiel anglickej výslovnosti. Funkcia prijíma celkom dva
parametre, kde prvým z nich je náš textový reťazec a druhým
nezdaniteľným parametrom je špecifikácia dĺžky kľúča. Ukážme si
príklad:
$str = "Programming is fun!"; echo metaphone($str);
Výstupom bude reťazec PRKRMNKSFN
, ktorý keď si skúsime
prečítať čo možno najviac anglicky, dostaneme výslovnosť pôvodného
reťazca.
$str = "Pronunciation"; $str1 = "Pronunciations"; echo metaphone($str, 7); echo "<br>"; echo metaphone($str1, 7);
Výstupom budú dva zhodné reťazca PRNNXXN
a
PRNNXXN
. Obmedzili sme totiž veľkosť kľúča, teda druhý
kľúč znie rovnako ako prvý.
soundex()
Funkcia soundex()
vypočíta rovnako ako pri funkcii
metaphone()
kľúč textového reťazca. Kľúčom je štvormiestny
alfanumerický reťazec, ktorý predstavuje anglickú výslovnosť slova.
Soundex je jeden z mnohých fonetických algoritmov a indexuje
slová s anglickou výslovnosťou. Možno ho využiť pre aplikácie
zaoberajúce sa napríklad vyhláskovaním. Na rozdiel od predchádzajúcej
funkcie prijíma iba jeden parameter, ktorým je náš textový reťazec.
Ukážme si príklady:
$str = "Programming is fun!"; echo soundex($str);
Na stránke potom dostaneme reťazec P626
.
Algoritmus funkcie soundex()
je nasledovné:
- Prvé písmeno je vždy zachované. Výskyty písmen A, E, I, O, U, Y, H, W sú vynechané, nemajú teda kód.
- Spoluhlásky (bez prvého písmena textového reťazca) sú nahradzované číslicami podľa tejto tabuľky:
písmená | kód |
---|---|
B, F, P, V | 1 |
C, G, J, K, Q, S, X, Z | 2 |
D, T | 3 |
L | 4 |
M, N | 5 |
R | 6 |
- Ak je pôvodný textový reťazec príliš krátky a algoritmus mu nepriradí aspoň tri číslice, je číselný kód do celkovej dĺžky troch doplnený nulami. Pokiaľ má výsledný kód viac ako tri číslice, sú zachované iba prvé tri.
htmlentities()
Je funkcia, ktorá nám prevedie niektoré HTML tagy alebo text na HTML
entity. Táto funkcia je podobná funkcii htmlspecialchars()
,
ktorú sme si predstavili v jednej z predchádzajúcich
lekcií. Funkcia prijíma celkom štyri parametre. Prvým parametrom je
náš textový reťazec obsahujúci HTML tagy, druhým parametrom sú vlajky
(flags), ktoré udávajú, ako spracovať úvodzovky, kódovanie a aký je
použitý typ dokumentu. Tretím parametrom je samotné kódovanie a posledným
štvrtým parametrom je možnosť zapnutia / vypnutia dvojitého kódovania.
Keď je dvojité kódovanie vypnuté, tak PHP nebude kódovať už existujúce
HTML entity druhýkrát. Ukážme si príklad:
<?php $str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'"; echo htmlentities($str, ENT_COMPAT);
Ak sa na výsledok výstupe pozrieme cez konzolu alebo v prehliadači zobrazíme zdrojový kód, uvidíme tento reťazec zapísaný ako:
Konzolová aplikácia
Kvadratická rovnice je vyjádřena předpisem: ax² + bx + c
Druhý parameter funkcia znamená len to, že v reťazci budú konvertované
len úvodzovky "
(flag ENT_COMPAT
).
<?php $str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'"; echo htmlentities($str, ENT_QUOTES);
Avšak zmenou druhého parametra na ENT_QUOTES
, ktorý nám
zabezpečí prevod úvodzoviek a apostrofov dostaneme do konzoly:
Konzolová aplikácia
Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'`
<?php $str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'"; echo htmlentities($str, ENT_NOQUOTES);
Ak sa rozhodneme neuskutočniť prevod žiadne úvodzovky alebo apostrofy, dostaneme do konzoly:
Konzolová aplikácia
Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'
Flag (vlajka, príznak) | popis |
---|---|
ENT_COMPAT |
Prevedie dvojité úvodzovky a jednoduché úvodzovky ponechá na pokoji. |
ENT_QUOTES |
Prevedie dvojité aj jednoduché úvodzovky. |
ENT_NOQUOTES |
Dvojité aj jednoduché úvodzovky nebudú prevedené. |
ENT_IGNORE |
Zahodí neplatné sekvencie kódových jednotiek namiesto vrátenia prázdneho reťazca. Používanie tohto Flag sa neodporúča z bezpečnostných dôvodov. |
ENT_SUBSTITUTE |
Nahradí neplatné sekvencie kódových jednotiek znakom U+FFFD
(UTF-8 ) alebo &#FFFD; namiesto vrátenia
prázdneho reťazca. |
ENT_DISALLOWED |
Nahradí neplatné sekvencie kódových jednotiek znakom U+FFFD
(UTF-8 ) alebo &#FFFD; namiesto ich ponechanie tak,
aké sú. To môže byť užitočné napríklad na zabezpečenie riadnej formy
dokumentov XML s vloženým externým obsahom. |
ENT_HTML401 |
Naloží s kódom ako HTML 4.01. |
ENT_XML1 |
Naloží s kódom ako XML 1. |
ENT_XHTML |
Naloží s kódom ako XHTML. |
ENT_HTML5 |
Naloží s kódom ako HTML 5. |
html_entity_decode()
Je funkcia, ktorá prevedie HTML entity späť na HTML tagy alebo text. Funkcia prijíma celkom štyri parametre. Prvým parametrom je náš textový reťazec obsahujúci HTML entity, druhým parametrom sú vlajky (flags), ktoré udávajú, ako spracovať úvodzovky a použitý typ dokumentu. Tretím parametrom je samotné kódovanie. Ukážme si príklady:
<?php $str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'"; echo htmlentities($str, ENT_COMPAT);
Prevedie reťazec obsahujúci HTML entity späť na pôvodné text bez nich. V konzole / surovom výpisu potom uvidíme:
Konzolová aplikácia
Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'
Ďalšie:
<?php $str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'"; echo htmlentities($str, ENT_QUOTES);
Prevedie reťazec s HTML entity späť na pôvodné text bez nich spoločne s apostrofmi. V konzole potom uvidíme:
Konzolová aplikácia
Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'
<?php $str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'"; echo htmlentities($str, ENT_NOQUOTES);
Ak zvolíme za druhý parameter vlajku ENT_NOQUOTES
, dostaneme v
konzole reťazec bez prevedenie entity apostrofu:
Konzolová aplikácia
Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'
Dostupné vlajočky sú všetky z funkcie htmlentities()
okrem
týchto:
ENT_IGNORE
ENT_SUBSTITUTE
ENT_DISALLOWED
V ďalšej lekcii, Úvod do matematických funkcií v PHP , sa uvedieme do problematiky matematických funkcií v PHP.