×
Vytvárame riešenia

Ako nahradzovať reťazce s podporou UTF-8 (PHP)

Práca v PHP so znakovou sadou Unicode môže byť pre programátorov oveľa zložitejšia ako v iných jazykoch. Výnimkou tak nie sú ani funkcie pre nahradzovanie reťazcov. Ak chce s nimi programátor efektívne pracovať, musí si naštudovať aspoň základnú problematiku multibyte zápisu znakov vo formáte UTF-8.
Zoberme si nasledujúci príklad. Za úlohu máme zvýrazniť slovo "špec" v reťazci "Špecifikácia formátu dokumentu RTF.". Ako vidieť, na znaky z radu multibyte (znaky mimo rozsah ASCII) sa modifikátor i neaplikuje.
Príklad: Štandardný postup pre zámenu reťazcov.
1
2
3
4
5
$text = "Špecifikácia formátu dokumentu RTF.";
$keyword = "špec";
$result = preg_replace("/(" . $keyword . ")/i", "<b>$1</b>", $text);
echo $result;
Pre podporu znakovej sady UTF-8 vo funkcii preg_replace() stačí iba drobná zmena a tou je pridanie modifikátora u. Bez pridania modifikátora u by bolo možné požadovaný výsledok dosiahnuť zmenou veľkosti písmen buď v texte pre vyhľadávanie alebo v texte, ktorý má byť hľadaný. V tomto prípade napríklad zmenou zápisu $keyword = "špec"; na $keyword = "Špec";. Takéto zmeny veľkosti písmen ale nie je možné efektívne aplikovať, keďže text zväčša nie je typu konštanta, ale ľubovoľný reťazec.
Príklad: Aplikovanie modifikátora u do regulárneho výrazu.
1
2
3
4
5
$text = "Špecifikácia formátu dokumentu RTF.";
$keyword = "špec";
$result = preg_replace("/(" . $keyword . ")/ui", "<b>$1</b>", $text);
echo $result;
Po úprave regulárneho výrazu už bude funkcia preg_replace() vracať správny výsledok.

Záver

Vďaka modifikátoru u je možné efektívne pracovať s reťazcami typu multibyte a nie je potrebné si lámať hlavu s použitím funkcií z knižnice Multibyte String.


PHP,utf-8,regexp,programovanie,preg_replace,PHP
Žiadna časť tohto článku nesmie byť reprodukovaná bez uvedenia autora a URL na túto stránku.
Viac informácií nájdete v sekcii O projekte.

Komentáre

Článok neobsahuje zatiaľ žiadne komentáre.

Pridať komentár

Meno (povinné)
Web
Správa (povinné)
Odoslať
Od najnovších