NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 17 - Fonetické funkce a kódování HTML entit v PHP

V minulé lekci, Hashování textových řetězců v PHP, jsme se dozvěděli, jak hashovat textové řetězce v PHP.

V dnešní lekci si ukážeme použití funkcí metaphone(), soundex(), htmlentities() a k ní i opačnou funkci html_entity_decode().

metaphone()

Funkce metaphone() vypočítá klíč textového řetězce. Takový klíč nám ukazuje, jak by daný textový řetězec vyslovil anglicky mluvící člověk. Metaphone je fonetický algoritmus pro indexování slov s anglickou výslovností, řetězec je tedy zakódován do již zmíněného klíče. Takový algoritmus lze použít pro různé aplikace zabývající se například hláskováním. Metaphone je podobný fonetickému algoritmu Soundex, avšak je více přesnější co se týče pravidel anglické výslovnosti. Funkce přijímá celkem dva parametry, kde prvním z nich je náš textový řetězec a druhým nepovinným parametrem je specifikace délky klíče. Ukažme si příklad:

$str = "Programming is fun!";
echo metaphone($str);

Výstupem bude řetězec PRKRMNKSFN, který když si zkusíme přečíst co možná nejvíce anglicky, dostaneme výslovnost původního řetězce.

$str = "Pronunciation";
$str1 = "Pronunciations";
echo metaphone($str, 7);
echo "<br>";
echo metaphone($str1, 7);

Výstupem budou dva shodné řetězce PRNNXXN a PRNNXXN. Omezili jsme totiž velikost klíče, tudíž druhý klíč zní stejně jako první.

soundex()

Funkce soundex() vypočítá stejně jako u funkce metaphone() klíč textového řetězce. Klíčem je čtyřmístný alfanumerický řetězec, který představuje anglickou výslovnost slova. Soundex je jeden z mnoha fonetických algoritmů a indexuje slova s anglickou výslovností. Lze jej využít pro aplikace zabývající se například hláskováním. Na rozdíl od předchozí funkce přijímá pouze jeden parametr, kterým je náš textový řetězec. Ukažme si příklady:

$str = "Programming is fun!";
echo soundex($str);

Na stránce poté dostaneme řetězec P626.

Algoritmus funkce soundex() je následující:

  • První písmeno je vždy zachováno. Výskyty písmen A, E, I, O, U, Y, H, W jsou vynechány, nemají tedy kód.
  • Souhlásky (bez prvního písmene textového řetězce) jsou nahrazovány číslicemi podle této tabulky:
Písmena 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
  • Pokud spolu v původním textovém řetězci (před krokem 1) sousedí dvě nebo více písmen se stejným kódem, je zachováno pouze první. Stejně tak, pokud jsou dvě písmena se stejným kódem odděleny písmeny H nebo W, jsou také kódovány pouze jednou číslicí. Oproti tomu dvě písmena se stejným kódem oddělené samohláskou jsou kódována dvěma číslicemi. Toto pravidlo se vztahuje také na první písmeno textového řetězce.
  • Pokud je původní textový řetězec příliš krátký a algoritmus mu nepřiřadí alespoň tři číslice, je číselný kód do celkové délky tří doplněn nulami. Pokud má výsledný kód více než tři číslice, jsou zachovány pouze první tři.

htmlentities()

Je funkce, která nám převede některé HTML tagy nebo text na HTML entity. Tato funkce je podobná funkci htmlspecialchars(), kterou jsme si představili v jedné z předchozích lekcí. Funkce přijímá celkem čtyři parametry. Prvním parametrem je náš textový řetězec obsahující HTML tagy, druhým parametrem jsou vlajky (flags), které udávají, jak zpracovat uvozovky, kódování a jaký je použitý typ dokumentu. Třetím parametrem je samotné kódování a posledním čtvrtým parametrem je možnost zapnutí/vypnutí dvojitého kódování. Když je dvojité kódování vypnuté, tak PHP nebude kódovat již existující HTML entity podruhé. Ukažme si příklad:

<?php
$str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'";
echo htmlentities($str, ENT_COMPAT);

Pokud se na výsledek výstupu podíváme přes konzoli nebo v prohlížeči zobrazíme zdrojový kód, uvidíme tento řetězec zapsán jako:

Konzolová aplikace
Kvadratick&aacute; rovnice je vyj&aacute;dřena předpisem: ax&sup2; + bx + c

Druhý parametr funkce znamená pouze to, že v řetězci budou konvertovány pouze uvozovky " (flag ENT_COMPAT).

<?php
$str = "Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'";
echo htmlentities($str, ENT_QUOTES);

Avšak změnou druhého parametru na ENT_QUOTES, který nám zajistí převod uvozovek a apostrofů dostaneme do konzole:

Konzolová aplikace
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);

Rozhodneme-li se nepřevádět žádné uvozovky nebo apostrofy, dostaneme do konzole:

Konzolová aplikace
Kvadratick&aacute; rovnice je vyj&aacute;dřena předpisem: 'ax&sup2; + bx + c'
Flag (vlajka, příznak) Popis
ENT_COMPAT Převede dvojité uvozovky a jednoduché uvozovky ponechá na pokoji.
ENT_QUOTES Převede dvojité i jednoduché uvozovky.
ENT_NOQUOTES Dvojité i jednoduché uvozovky nebudou převedeny.
ENT_IGNORE Zahodí neplatné sekvence kódových jednotek namísto vrácení prázdného řetězce. Používání tohoto flagu se nedoporučuje z bezpečnostních důvodů.
ENT_SUBSTITUTE Nahradí neplatné sekvence kódových jednotek znakem U+FFFD (UTF-8) nebo &#FFFD; namísto vrácení prázdného řetězce.
ENT_DISALLOWED Nahradí neplatné sekvence kódových jednotek znakem U+FFFD (UTF-8) nebo &#FFFD; namísto jejich ponechání tak, jaké jsou. To může být užitečné například k zajištění řádné formy dokumentů XML s vloženým externím obsahem.
ENT_HTML401 Naloží s kódem jako HTML 4.01.
ENT_XML1 Naloží s kódem jako XML 1.
ENT_XHTML Naloží s kódem jako XHTML.
ENT_HTML5 Naloží s kódem jako HTML 5.

html_entity_decode()

Je funkce, která převede HTML entity zpět na HTML tagy nebo text. Funkce přijímá celkem čtyři parametry. Prvním parametrem je náš textový řetězec obsahující HTML entity, druhým parametrem jsou vlajky (flags), které udávají, jak zpracovat uvozovky a použitý typ dokumentu. Třetím parametrem je samotné kódování. Ukažme si příklady:

<?php
$str = "Kvadratick&aacute; rovnice je vyj&aacute;dřena předpisem: 'ax&sup2; + bx + c'";
echo htmlentities($str, ENT_COMPAT);

Převede řetězec obsahující HTML entity zpět na původní text bez nich. V konzoli/surovém výpisu poté uvidíme:

Konzolová aplikace
Kvadratická rovnice je vyjádřena předpisem: 'ax² + bx + c'

Další:

<?php
$str = "Kvadratick&aacute; rovnice je vyj&aacute;dřena předpisem: &#039;ax&sup2; + bx + c&#039;";
echo htmlentities($str, ENT_QUOTES);

Převede řetězec s HTML entity zpět na původní text bez nich společně s apostrofy. V konzoli poté uvidíme:

Konzolová aplikace
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);

Pokud zvolíme za druhý parametr vlajku ENT_NOQUOTES, dostaneme v konzoli řetězec bez převedení entity apostrofu:

Konzolová aplikace
Kvadratická rovnice je vyjádřena předpisem: &#039;ax² + bx + c&#039;

Dostupné vlaječky jsou všechny z funkce htmlentities() kromě těchto:

  • ENT_IGNORE
  • ENT_SUBSTITUTE
  • ENT_DISALLOWED

V následujícím kvízu, Kvíz - Převody, hashování řetězců a fonetické funkce v PHP, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Hashování textových řetězců v PHP
Všechny články v sekci
PHP funkce
Přeskočit článek
(nedoporučujeme)
Kvíz - Převody, hashování řetězců a fonetické funkce v PHP
Článek pro vás napsal Pavel Vaněček
Avatar
Uživatelské hodnocení:
5 hlasů
Autor se věnuje psaní článků na Itnetwork.cz
Aktivity