IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 15 - Převody textových řetězců v PHP

V předchozím kvízu, Kvíz - Porovnávání a vyhledávání textových řetězců v PHP, jsme si ověřili nabyté zkušenosti z předchozích lekcí.

V této lekci kurzu PHP funkcí si ukážeme, jak převádět textové řetězce. Například z řetězce hexadecimálních hodnot převedeme na řetězec s ASCII znaky a naopak.

hex2bin()

Je funkce která nám převede řetězec tvořený hexadecimálními hodnotami na řetězec s ASCII znaky. Často je funkčnost této funkce zaměňována za převod mezi soustavami, konkrétně z hexadecimální soustavy na dvojkovou (binární). K takovému účelu však slouží funkce base_convert(), kterou si vysvětlíme níže. V případě neplatného řetězce s hexadecimálními hodnotami nám funkce vrátí booleanovskou hodnotu false. Ukažme si několik příkladů:

$hex2bin = hex2bin("54656e746f2074657874206a652076206173636969206b6f646f76616e69");
print_r($hex2bin);

Hexadecimální řetězec ve funkci hex2bin() se převede na pro nás čitelný textový řetězec v ASCII kódování. Výstupem na stránku bude text "Tento text je v ascii kodovani".

$hex2bin = hex2bin("1586515969636861");
print_r($hex2bin);

Je důležité mít na paměti, že se hexadecimální řetězec převádí na textový řetězec v kódování ASCII. V tabulce ASCII se nenachází znaky s diakritikou, tudíž při pokusu o převod textu uvedeného v tomto příkladu (původně "Řeřicha") dostaneme na stránku text "†QYicha".

$hex2bin = hex2bin("54 65 6e 74 6f 20 74 65 78 74 20 6a 65 20 6e 65 70 6c 61 74 6e 79");
print_r($hex2bin);

Pozor si musíme dávat také na platnost hexadecimálního řetězce. Ač byla dobrá myšlenka si tyto hodnoty oddělit mezerou, tak ve funkci hex2bin() se nesmí vyskytovat jiné znaky než ty hexadecimální (0-F, šestnáctková soustava) a řetězec musí mít taktéž platnou délku. V tomto případě dostaneme na výstup booleanovskou hodnotu false a ještě hlášku WARNING o platnosti délky hexadecimálního řetězce. Totéž platí u příkladu níže:

$hex2bin = hex2bin("?!#*");
print_r($hex2bin);

bin2hex()

Funkce bin2hex() nám převede textový řetězec na řetězec s hexadecimálními hodnotami. Jedná se vlastně o funkci opačnou k hex2bin() a její funkčnost je zaměňována za převod mezi soustavami, konkrétně z dvojkové (binární) na hexadecimální. Ukažme si příklad:

$bin2hex= bin2hex("Text do hexadecimalni soustavy");
print_r($bin2hex);

Řetězec s ASCII znaky se nám bez potíží převede na řetězec s hexadecimálními hodnotami. Na výstup dostaneme hexadecimální řetězec:

5465787420646f2068657861646563696d616c6e6920736f757374617679

který se rovná našemu textovému řetězci. Budeme-li se snažit převést znaky s českou diakritikou:

$bin2hex= bin2hex("Česká diakritika");
print_r($bin2hex);

dostaneme na výstup hexadecimální řetězec:

c48c65736bc3a1206469616b726974696b61

který je taktéž rovný našemu textovému řetězci.

base_convert()

I přestože se tato funkce řadí mezi matematické, tak si ji v této lekci popíšeme. Funkce base_convert() nám převede náš vstup v libovolné soustavě do výstupu taktéž v libovolné soustavě. Funkce přijímá celkem 3 parametry, kde prvním z nich je náš vstup v datovém typu textového řetězce (string). Druhým parametrem je specifikace, z jaké soustavy náš vstup převádíme, resp. v jaké soustavě se nachází. Posledním parametrem je typ soustavy, v jaké dostaneme náš výstup. Typ soustavy zadáváme do parametrů funkce jako čísla. Například:

  • dvojková soustava -> 2,
  • hexadecimální soustava -> 16, atp.

Ukažme si nějaké příklady:

$base_convert = base_convert('a37334', 16, 2);
print_r ($base_convert);

Zde dojde k převodu hexadecimálních hodnot a37334 z hexadecimální soustavy do dvojkové (binární). Výstupem tedy bude 101000110111001100110100.

$base_convert = base_convert('3745', 8, 10);
print_r ($base_convert);

Tady převádíme číslo 3745 z osmičkové soustavy do desítkové. Výstupem je číslo 2021:

$base_convert = base_convert('a12f', 2, 16);
print_r ($base_convert);

Zkusíme-li převést číslo z chybné soustavy, kde a12f je pravděpodobné hexadecimální řetězec, bude funkce ignorovat neplatné hodnoty, které do soustavy specifikované v prvním parametru nepatří a zbylé hodnoty budou převedeny do soustavy specifikované ve třetím parametru. Na výstup dostaneme číslo 1.

ord()

Funkce ord() vrací ASCII hodnotu, resp. pozici v ASCII tabulce prvního bajtu (většinou znaku) našeho řetězce. Funkce přijímá pouze textový řetězec jako jediný parametr. Opak této funkce (převod ASCII kódu na znak) je funkce chr(). Příkladem této funkce může být:

$ord = ord("Zdravím tě světe");
print_r ($ord);

Prvním bajtem v našem textovém řetězci je znak Z, který odpovídá hodnotě, resp. pozici 90 v tabulce ASCII. Výstupem na stránku bude právě tato pozice.

$ord = ord("Řeka");
print_r ($ord);

V tomto případě první bajt znaku Ř vypíše hodnotu 197 v tabulce ASCII. Pokud se však koukneme na ASCII tabulku, zjistíme, že ta diakritiku nemá a tudíž je převod chybný. Jde o to, že funkce ord() nedokáže převést multibyte znaky (UTF-8, UTF-16). Podporované kódování jsou ASCII, ISO-8859 a Windows 1252. Další příklad:

$ord = ord("\nDalší nová řádka");
print_r ($ord);

Také znak nového řádku má velikost 1 byte a v tabulce ASCII má svou hodnotu, konkrétně hodnotu 10, která bude vypsána na stránku.

V další lekci, Hashování textových řetězců v PHP, si ukážeme, jak hashovat textové řetězce v PHP.


 

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