Mbstring ja PHP peavad kasutama veebirakenduste arendamisel
Baitid ja bitid on kaks ühikut loogilise teabe salvestamiseks. Natuke võib pidada üheks auguks, mille saab täita ühega kahest väärtusest: 0 või 1.
Bait on kaheksast bitist koosnev rühmitus. Matemaatika mõttes on bait võimeline esindama 256 erinevat väärtust (28).
Mõelgem keelele, ütleme inglise keelele. Sellel on mõned märgid (a, b, c, … jne), mis on arvutis esitatud baitidena. Ingliskeelsete märkide koguarv ei ületa 256, seega saab iga tähemärki esitada erineva 8-bitise jada abil.
Stringid on lihtsalt märkide kogum. Tavaliselt töötavad PHP-s stringioperatsioonid ühebaidiliste tähemärkide stringidega. Näiteks: võite võrrelda stringe "Tere" ja "Tere". Strcmpr() abil võrreldakse kahte stringi, eeldades, et iga tähemärk stringis võtab ühe baidi.
Kuid mõelge keelele, milles on rohkem kui 256 tähemärki (nt jaapani keel) või kui tahame korraga esindada mitme keele tähemärke. Ühest baidist iga märgi jaoks ei piisa. Siin tulebki sisse mitmebaidi kontseptsioon.
Jaapani teksti string võib põhjustada funktsiooni strcmpr() tagastamise vale või prügi väärtuse, kuna eeldus, et üks bait tähistab ühte märki, ei pea enam paika. Kui töötame mitmebaidilise kodeeringuga stringidega, vajab nende stringidega manipuleerimine pigem erifunktsioone kui tavalisi ühebaidiseid stringifunktsioone. Mitmebaidiste stringide käsitlemiseks PHP-s pakub mbstring mitmebaidiseid stringifunktsioone.
UTF-8 mõistmine
UTF tähistab Unicode’i teisendusvormingut ja on kodeerimissüsteem, mille eesmärk on esitada iga tähemärk igas keeles ühes märgikomplektis. UTF-il on erinevaid versioone, millest mõned on näidatud allpool:
Kodeerimisvorming | Kirjeldus |
UTF-1 | Ühildub ISO-2022-ga, mis on Unicode’i standardist vananenud. |
UTF-7 | 7-bitine kodeerimissüsteem, mida kasutati peamiselt e-postis, kuid ei kuulu Unicode’i standardi alla. |
UTF-8 | 8-bitine kodeerimissüsteem, muutuva laiusega ja on ASCII-ühilduv. |
UTF-EBCDIC | 8-bitine kodeerimissüsteem, muutuva laiusega ja ühildub EBCDIC-ga. |
UTF-16 | 16-bitine kodeerimissüsteem, muutuva laiusega. |
UTF-32 | 32-bitine fikseeritud laiusega kodeerimissüsteem. |
Mitmebaidise tekstiga töötades kasutame enamasti UTF-8, seega keskendume sellele hetkeks. UTF-8 kodeerib tähemärgid mitme baiti kaupa, kasutades järgmist skeemi:
Niisiis, kuidas ta teab, kas see märk on salvestatud ühes baidis või mitmes baidis? Selleks vaadeldakse esimese baidi kõrget järku bitti.
Kood | Tähendus |
0xxxxxxx | Ühebaidine kood |
110xxxxx | Sellele baidile järgneb veel üks bait |
1110xxxx | Sellele baidile järgneb veel kaks baiti |
11110xxx | Sellele baidile järgneb veel kolm baiti |
111110xx | Sellele baidile järgneb veel neli baiti |
1111110x | Sellele baidile järgneb veel viis baiti |
10xxxxxx | Mitmebaidise märgi jätk |
Iga mitmebaidise jada jätkuv bait algab seejärel kahe kõrgeima järgu bitiga 1 ja 0-ga, et võimaldada rikutud andmete tuvastamist.
Ühiste stringifunktsioonide mitmebaidised ekvivalendid
Tavaliselt kasutatavate stringifunktsioonide jaoks, nagu strlen(), strops() ja substr(), on olemas mitmebaidised samaväärsed funktsioonid. Mitmebaidiste stringidega töötades peaksite kasutama samaväärseid funktsioone.
Tabel 4: Ühebaidilised samaväärsed mitmebaidised stringifunktsioonid
Üks bait | Multibait | Kirjeldus |
strlen() | mb_strlen() | Hangi stringi pikkus |
strpos() | mb_strpos() | Otsige stringi esimese esinemiskoha asukoht stringis |
substr() | mb_substr() | Tagastab stringi osa |
strtolower() | mb_strtolower() | Tehke string väiketähtedega |
strtoupper() | mb_strtoupper() | Tehke string suurtähtedega |
substr_count() | mb_substr_count() | Loendage alamstringi esinemiste arv |
split () | mb_split() | Jagage string massiiviks regulaaravaldise abil |
mail() | mb_send_mail() | Saada kodeeritud kiri |
erg() | mb_ereg() | Regulaaravaldise vaste |
tee () | mb_regi() | Tõstutundlikud regulaaravaldise vaste |
Lubage mul tuua näide mitmebaidise funktsiooni kasutamisest:
-
Funktsiooni nimi: int mb_strlen (string $str [, string $kodeering ])
-
Kirjeldus: Hankige stringi pikkus.
-
Parameetrid: str (sisendstring, mille pikkus tuleks määrata)
kodeering (tähemärkide kodeering)
-
Tagastusväärtus: sisendstringi stringi tähemärgi arv märgikodeeringu kodeeringuga
-
Tagastamise tüüp: int
Näidiskood: Siin on näidiskood funktsiooni mb_strlen kasutamiseks. Siin on sisestusstring hiina sõna ja kasutatakse kolme erinevat märgikodeeringu valikut.
$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').
Piirangud: UTF-8-l on mõned piirangud, näiteks
- Teoreetiliselt on UTF-8 kodeeritud tähemärkide suurim pikkus kuus baiti.
- Selles kodeeringus ei kasutata kunagi 0xFE ja 0xFF.
Luba mbstring saidilt php.ini :
- Kinnitage faili php_mbstring.dll olemasolu ext kaustas.
- Tühista ;extension=php_mbstring.dll failist php.ini (st laiend=php_mbstring.dll)
- Taaskäivitage server.
Käitusaja konfiguratsioon: mõne mbstringi funktsiooni lubamiseks tuleks muuta veel mõnda seadet.
Tabel 5: Konfiguratsioonid failis php.ini
Nimi | Vaikeväärtus | Muudetav variant |
mbstring.language | neutraalne | PHP_INI_SYSTEM | PHP_INI_PERDIR |
mbstring.detect_order | NULL | PHP_INI_ALL |
mbstring.http_input | üle andma | PHP_INI_ALL |
mbstring.http_väljund | üle andma | PHP_INI_ALL |
mbstring.internal_encoding | NULL | PHP_INI_ALL |
mbstring.script_encoding | NULL | PHP_INI_ALL |
mbstring.substitute_character | NULL | PHP_INI_ALL |
mbstring.func_overload | 0 | PHP_INI_SYSTEM | PHP_INI_PERDIR |
mbstring.encoding_translation | 0 | PHP_INI_SYSTEM | PHP_INI_PERDIR |
Konfiguratsioonivalikute selgitus:
"Muudatav valik" määrab muudetava režiimi väärtuse. See kirjeldab, kuidas ja kust saab mbstringi valikuid muuta. Siin on režiimi väärtuste tähendus:
Tabel 6: Erinevad muutmisrežiimid
Režiim | Tähendus |
PHP_INI_SYSTEM | Kirje saab määrata php.ini või httpd.conf abil |
PHP_INI_PERDIR | Kirje saab määrata kasutades php.ini, .htaccess, httpd.conf või .user.ini |
PHP_INI_ALL | Saame sisestada kõikjalt |
PHP_INI_USER | Kirje saab määrata kasutaja skripti abil. |
Kuidas muuta kasutaja skripti:
Mbstringi sisemise kodeeringu määramiseks kasutaja skriptist saame kasutada järgmist koodi:
<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>
Kuidas muuta saidilt php.ini:
Mõne mbstringi suvandi määramiseks saame redigeerida faili php.ini.
; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
; Enabled HTTP input encoding translation.
mbstring.encoding_translation = On
; Set default HTTP input character encoding
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
Mõned mbstringiga seotud probleemid:
Mbstringi funktsioonide kasutamine võib teid mõnikord ahistada. Siin käsitlen mõningaid mitmebaidise funktsiooni ülekoormuse kasutamise probleeme. Mõelgem stsenaariumile.
Olete oma php.ini failis lubanud mbstring.func_overload. Teie töö läheb hästi. Te koormate ühebaidise stringi funktsiooni mitmebaidise stringi funktsiooniga üle. Aga mis juhtub, kui vajate välist teeki, mis kasutab sageli mõnda stringifunktsiooni?
Sellele probleemile on lahendus. Võite kasutada faili mbstring.internal_coding. Kui helistate mõnele välisele teegile, kasutab see ühebaidist kodeeringut ja projekti juurde tagasi jõudes rakendatakse mitmebaidist kodeeringut. Aga mis juhtub, kui teie projekti ja välise teegi vahel toimub tagasihelistamine? Siin see ebaõnnestub.
Seega peate mbstringi valikute kasutamisel neid probleeme meeles pidama.
Mbstringi tähtsus veebiarenduses:
Mis tahes rahvusvahelise veebirakenduse arendamiseks on mbstringi kasutamine kohustuslik. Vastasel juhul on teie taotlus piiratud teatud rahvaste ja keeltega. Arendajana soovitan teil selles valdkonnas teadmisi hankida ja end veebiprogrammeerijana tõhusaks muuta.