Mbstring ja PHP peavad kasutama veebirakenduste arendamisel

2

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.

: instantshift.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More