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í.

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.


 

Predchádzajúci článok
Vyhľadávania textových reťazcov v PHP III. časť
Všetky články v sekcii
PHP funkcie
Preskočiť článok
(neodporúčame)
Hashovanie textových reťazcov
Č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