15. diel - Prevody textových reťazcov v PHP
V minulej lekcii, Vyhľadávania textových reťazcov v PHP III. časť , sme si ukázali ďalšie funkcie pre vyhľadávanie textových reťazcov.
V tejto lekcii kurze PHP funkcií si ukážeme, ako prevádzať textové reťazce. Napríklad z reťazca hexadecimálnych hodnôt prevedieme na reťazec s ASCII znakmi a naopak.
hex2bin()
Je funkcia ktorá nám prevedie reťazec tvorený hexadecimálnymi
hodnotami na reťazec s ASCII znakmi. Často je funkčnosť tejto
funkcie zamieňaná za prevod medzi sústavami, konkrétne z hexadecimálne
sústavy na dvojkovú (binárne). K takémuto účelu však slúži funkcia
base_convert()
, ktorú si vysvetlíme nižšie. V prípade
neplatného reťazca s hexadecimálnymi hodnotami nám funkcia vráti
booleanovskou hodnotu false
. Ukážme si niekoľko príkladov:
$hex2bin = hex2bin("54656e746f2074657874206a652076206173636969206b6f646f76616e69"); print_r($hex2bin);
Hexadecimálne reťazec vo funkcii hex2bin()
sa prevedie na pre
nás čitateľný textový reťazec v ASCII kódovania.
Výstupom na stránku bude text
"Tento text je v ascii kodovani"
.
$hex2bin = hex2bin("1586515969636861"); print_r($hex2bin);
Je dôležité mať na pamäti, že sa hexadecimálne reťazec prevádza na
textový reťazec v kódovaní ASCII. V tabuľke ASCII sa
nenachádza znaky s diakritikou, teda pri pokuse o prevod textu uvedeného v
tomto príklade (pôvodne "Ř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ávať tiež na platnosť hexadecimálneho reťazca. Hoci
bola dobrá myšlienka si tieto hodnoty oddeliť medzerou, tak vo funkcii
hex2bin()
sa nesmú vyskytovať iné znaky ako tie hexadecimálne
(0-F
, šesťnástková sústava) a reťazec musí mať taktiež
platnú dĺžku. V tomto prípade dostaneme na výstup booleanovskou hodnotu
false
a ešte hlášku WARNING
o platnosti
dĺžky hexadecimálneho reťazca. To isté platí u príklade
nižšie:
$hex2bin = hex2bin("?!#*"); print_r($hex2bin);
bin2hex()
Funkcia bin2hex()
nám prevedie textový reťazec na
reťazec s hexadecimálnymi hodnotami. Jedná sa vlastne o funkciu
opačnú k hex2bin()
a jej funkčnosť je zamieňaná za prevod
medzi sústavami, konkrétne z dvojkovej (binárnej) na hexadecimálne. Ukážme
si príklad:
$bin2hex= bin2hex("Text do hexadecimalni soustavy"); print_r($bin2hex);
Reťazec s ASCII znakmi sa nám bez problémov prevedie na reťazec s hexadecimálnymi hodnotami. Na výstup dostaneme hexadecimálne reťazec:
5465787420646f2068657861646563696d616c6e6920736f757374617679
ktorý sa rovná nášmu textovému reťazcu. Ak sa budeme snažiť previesť znaky so slovenskou diakritikou:
$bin2hex= bin2hex("Česká diakritika"); print_r($bin2hex);
dostaneme na výstup hexadecimálne reťazec:
c48c65736bc3a1206469616b726974696b61
ktorý je taktiež rovný nášmu textovému reťazcu.
base_convert()
Aj napriek tomu, že sa táto funkcia radí medzi matematické, tak si ju v
tejto lekcii popíšeme. Funkcia base_convert()
nám prevedie náš
vstup v ľubovoľnej sústave do výstupu taktiež v ľubovoľnej sústave.
Funkcia prijíma celkom 3 parametre, kde prvým z nich je náš vstup v dátovom
typu textového reťazca (string
). Druhým parametrom je
špecifikácia, z akej sústavy náš vstup prevádzame, resp. v akej sústave
sa nachádza. Posledným parametrom je typ sústavy, v akej dostaneme náš
výstup. Typ sústavy zadávame do parametrov funkcie ako čísla.
napríklad:
- dvojková sústava -> 2,
- hexadecimálne sústava -> 16, atp.
Ukážme si nejaké príklady:
$base_convert = base_convert('a37334', 16, 2); print_r ($base_convert);
Tu dôjde k prevodu hexadecimálnych hodnôt a37334
z
hexadecimálne sústavy do dvojkovej (binárne). Výstupom teda bude
101000110111001100110100
.
$base_convert = base_convert('3745', 8, 10); print_r ($base_convert);
Tu prevádzame číslo 3745
z osmičkového sústavy do
desiatkovej. Výstupom je číslo 2021
:
$base_convert = base_convert('a12f', 2, 16); print_r ($base_convert);
Skúsime chcete previesť číslo z chybnej sústavy, kde a12f
je pravdepodobné hexadecimálne reťazec, bude funkcia ignorovať neplatné
hodnoty, ktoré do sústavy špecifikovanej v prvom parametri nepatrí a
zvyšné hodnoty budú prevedené do sústavy špecifikovanej v treťom
parametri. Na výstup dostaneme číslo 1
.
ord()
Funkcia ord()
vracia ASCII hodnotu, resp. pozíciu v ASCII
tabuľke prvého bajtu (väčšinou znaku) nášho reťazca. Funkcia prijíma
iba textový reťazec ako jediný parameter. Opak tejto funkcie (prevod ASCII
kódu na znak) je funkcia chr()
. Príkladom tejto funkcie môže
byť:
$ord = ord("Zdravím tě světe"); print_r ($ord);
Prvým bajtom v našom textovom reťazci je znak Z
, ktorý
zodpovedá hodnote, resp. pozíciu 90
v tabuľke ASCII. Výstupom
na stránku bude práve táto pozícia.
$ord = ord("Řeka"); print_r ($ord);
V tomto prípade prvý bajt znaku Ř
vypíše hodnotu
197
v tabuľke ASCII. Ak sa však pozrieme na ASCII tabuľku,
zistíme, že tá diakritiku nemá a teda je prevod chybný. Ide o to, že
funkcia ord()
nedokáže previesť multibyte znaky
(UTF-8
, UTF-16
). Podporované kódovanie sú ASCII,
ISO-8859 a Windows 1252. Ďalší príklad:
$ord = ord("\nDalší nová řádka"); print_r ($ord);
Tiež znak nového riadku má veľkosť 1 byte a v tabuľke ASCII má svoju
hodnotu, konkrétne hodnotu 10
, ktorá bude vypísaná na
stránku.
V ďalšej lekcii, Hashovanie textových reťazcov , si ukážeme, ako Hashovať textové reťazce v PHP.