IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 spolu v pôvodnom textovom reťazci (pred krokom 1) susedí dve alebo viac písmen s rovnakým kódom, je zachované iba prvý. Rovnako tak, ak sú dve písmená s rovnakým kódom oddelené písmenami H alebo W, sú tiež kódované iba raz číslicou. Oproti tomu dve písmená s rovnakým kódom oddelené samohláskou sú kódované dvoma číslicami. Toto pravidlo sa vzťahuje aj na prvé písmeno textového reťazca.
  • 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&aacute; rovnice je vyj&aacute;dřena předpisem: ax&sup2; + 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&aacute; rovnice je vyj&aacute;dřena předpisem: &#039;ax&sup2; + bx + c&#039;`
<?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&aacute; rovnice je vyj&aacute;dřena předpisem: 'ax&sup2; + 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&aacute; rovnice je vyj&aacute;dřena předpisem: 'ax&sup2; + 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&aacute; rovnice je vyj&aacute;dřena předpisem: &#039;ax&sup2; + bx + c&#039;";
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&aacute; rovnice je vyj&aacute;dřena předpisem: &#039;ax&sup2; + bx + c&#039;";
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: &#039;ax² + bx + c&#039;

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.


 

Predchádzajúci článok
Hashovanie textových reťazcov
Všetky články v sekcii
PHP funkcie
Preskočiť článok
(neodporúčame)
Úvod do matematických funkcií v PHP
Článok pre vás napísal Pavel Vaněček
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity