Mbstringiä ja PHP:tä on käytettävä verkkosovelluskehityksessä
Tavut ja bitit ovat kaksi yksikköä loogisen tiedon tallentamiseen. Bittiä voidaan pitää yhtenä reiänä, joka voidaan täyttää kahdella arvolla: 0 tai 1.
Tavu on kahdeksan bitin ryhmä. Matemaattisesti tavu pystyy edustamaan 256 eri arvoa (28).
Ajatellaanpa kieltä, vaikkapa englantia. Siinä on joitain merkkejä (a, b, c, … jne.), jotka esitetään tietokoneessa tavuina. Englannin kielen merkkien kokonaismäärä on enintään 256, joten jokainen merkki voidaan esittää käyttämällä erilaista 8-bittistä sekvenssiä.
Merkkijonot ovat yksinkertaisesti kokoelma merkkejä. Normaalisti PHP:ssä merkkijonotoiminnot toimivat yksitavuisilla merkkijonoilla. Esimerkiksi: saatat haluta verrata merkkijonoja "Hei" ja "Hei". Strcmpr() -komennolla näitä kahta merkkijonoa verrataan olettaen, että jokainen merkkijonon merkki vie yhden tavun.
Mutta ajattele kieltä, jossa on yli 256 merkkiä (esimerkiksi japani), tai kun haluamme edustaa useiden kielten merkkejä samanaikaisesti. Yksi tavun tallennus kutakin merkkiä kohti ei riitä. Tässä tulee esiin monitavuinen konsepti.
Japaninkielisen tekstin merkkijono voi saada strcmpr()-funktion palauttamaan väärän tai roskaarvon, koska oletus, että yksi tavu edustaa yhtä merkkiä, ei enää pidä paikkaansa. Kun työskentelemme monitavuisten merkkijonojen kanssa, näiden merkkijonojen käsittely vaatii erikoistoimintoja yleisten yksitavuisten merkkijonotoimintojen sijaan. Monitavuisten merkkijonojen käsittelemiseksi PHP:ssä mbstring tarjoaa monitavuiset merkkijonotoiminnot.
UTF-8 ymmärtäminen
UTF on lyhenne sanoista Unicode Transformation Format, ja se on koodausjärjestelmä, jonka tavoitteena on edustaa jokaisen kielen jokainen merkki yhdessä merkistössä. UTF:stä on erilaisia versioita, joista osa on esitetty alla:
Koodausmuoto | Kuvaus |
UTF-1 | Yhteensopiva ISO-2022:n kanssa, joka on vanhentunut Unicode-standardista. |
UTF-7 | 7-bittinen koodausjärjestelmä, jota käytettiin pääasiassa sähköpostissa, mutta ei osa Unicode-standardia. |
UTF-8 | 8-bittinen koodausjärjestelmä, vaihtuvaleveys ja on ASCII-yhteensopiva. |
UTF-EBCDIC | 8-bittinen koodausjärjestelmä, vaihtuvaleveys ja on EBCDIC-yhteensopiva. |
UTF-16 | 16-bittinen koodausjärjestelmä, vaihtuva leveys. |
UTF-32 | 32-bittinen koodausjärjestelmä, kiinteä leveys. |
Käytämme UTF-8:aa suurimman osan ajasta työskennellessämme monitavuisen tekstin kanssa, joten keskitytäänpä siihen hetki. UTF-8 koodaa merkit useissa tavuissa seuraavalla tavalla:
Joten, mistä se tietää, onko se merkki tallennettu yhteen tavuun vai useisiin tavuihin? Tätä varten se tarkastelee ensimmäisen tavun korkean asteen bittiä.
Koodi | Merkitys |
0xxxxxxxx | Yksitavuinen koodi |
110xxxxx | Tätä tavua seuraa vielä yksi tavu |
1110xxxx | Tätä tavua seuraa vielä kaksi tavua |
11110xxx | Tätä tavua seuraa vielä kolme tavua |
111110xx | Tätä tavua seuraa vielä neljä tavua |
1111110x | Tätä tavua seuraa vielä viisi tavua |
10xxxxxx | Monitavuisen merkin jatko |
Jokainen monitavuisen sekvenssin jatkuva tavu alkaa sitten 1:llä ja 0:lla kahdessa korkeimman kertaluokan bitissään tarjotakseen tavan havaita vioittuneita tietoja.
Yleisten merkkijonofunktioiden monitavuiset ekvivalentit
Yleisesti käytetyille merkkijonofunktioille, kuten strlen(), strops() ja substr(), on monitavuisia vastaavia toimintoja. Sinun tulee käyttää vastaavia toimintoja työskennellessäsi monitavuisten merkkijonojen kanssa.
Taulukko 4: Yksitavuiset vastaavat monitavuiset merkkijonofunktiot
Yksi tavu | Monitavu | Kuvaus |
strlen() | mb_strlen() | Hanki merkkijonon pituus |
strpos() | mb_strpos() | Etsi merkkijonon ensimmäisen esiintymisen paikka merkkijonossa |
substr() | mb_substr() | Palauttaa merkkijonon osan |
strtolower() | mb_strtolower() | Tee merkkijonosta pienet kirjaimet |
strtoupper() | mb_strtoupper() | Tee merkkijono isoilla kirjaimilla |
substr_count() | mb_substr_count() | Laske osamerkkijonon esiintymisten määrä |
jakaa() | mb_split() | Jaa merkkijono taulukkoon säännöllisellä lausekkeella |
posti() | mb_send_mail() | Lähetä koodattu posti |
erg() | mb_ereg() | Säännöllisen lausekkeen haku |
tehdä() | mb_regi() | Kirjainkoolla ei eroa säännöllisten lausekkeiden haku |
Annan esimerkin monitavufunktion käytöstä:
-
Toiminnon nimi: int mb_strlen (merkkijono $str [, merkkijono $koodaus ])
-
Kuvaus: Hanki merkkijonon pituus.
-
Parametrit: str (syötemerkkijono, jonka pituus tulee määrittää)
koodaus (merkkien koodaus)
-
Palautusarvo: Syöttömerkkijonon str merkkien lukumäärä merkkikoodauksella
-
Palautustyyppi: int
Esimerkkikoodi: Tässä on esimerkkikoodi mb_strlen-funktion käyttämisestä. Tässä syöttömerkkijono on kiinalainen sana, ja käytössä on kolme erilaista merkkikoodausvaihtoehtoa.
$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').
Rajoitukset: UTF-8:ssa on joitain rajoituksia, kuten
- Teoreettisesti UTF-8-koodattujen merkkien suurin pituus on kuusi tavua.
- 0xFE ja 0xFF eivät ole koskaan käytössä tässä koodauksessa.
Ota mbstring käyttöön php.inistä :
- Vahvista php_mbstring.dll:n olemassaolo ext-kansiossa.
- Poista kommentti ;extension=php_mbstring.dll tiedostosta php.ini (eli laajennus=php_mbstring.dll)
- Käynnistä palvelin uudelleen.
Runtime Configuration: Joidenkin mbstring-toimintojen ottamiseksi käyttöön, muuta asetuksia tulee muuttaa.
Taulukko 5: Määritykset tiedostossa php.ini
Nimi | Oletusarvo | Vaihtoehto |
mbstring.language | neutraali | PHP_INI_SYSTEM | PHP_INI_PERDIR |
mbstring.detect_order | TYHJÄ | PHP_INI_ALL |
mbstring.http_input | kulkea | PHP_INI_ALL |
mbstring.http_output | kulkea | PHP_INI_ALL |
mbstring.internal_encoding | TYHJÄ | PHP_INI_ALL |
mbstring.script_encoding | TYHJÄ | PHP_INI_ALL |
mbstring.substitute_character | TYHJÄ | PHP_INI_ALL |
mbstring.func_overload | 0 | PHP_INI_SYSTEM | PHP_INI_PERDIR |
mbstring.encoding_translation | 0 | PHP_INI_SYSTEM | PHP_INI_PERDIR |
Selitys asetusvaihtoehdoista:
"Muutettava vaihtoehto" määrittää muutettavan tilan arvon. Se kuvaa, kuinka ja mistä mbstring-asetuksia voidaan muuttaa. Tässä on tila-arvojen merkitys:
Taulukko 6: Eri vaihtotila
tila | Merkitys |
PHP_INI_SYSTEM | Voimme asettaa merkinnän käyttämällä php.ini tai httpd.conf |
PHP_INI_PERDIR | Voimme asettaa merkinnän käyttämällä php.ini, .htaccess, httpd.conf tai .user.ini |
PHP_INI_ALL | Voimme asettaa sisääntulon mistä tahansa |
PHP_INI_USER | Voimme asettaa merkinnän käyttämällä käyttäjän komentosarjaa. |
Kuinka vaihtaa käyttäjän komentosarjasta:
Voimme käyttää seuraavaa koodia mbstringin sisäisen koodauksen asettamiseen käyttäjän komentosarjasta:
<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>
Kuinka vaihtaa php.inistä:
Voimme muokata php.ini-tiedostoa asettaaksemme joitain mbstring-asetuksia.
; 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
Joitakin mbstringiin liittyviä ongelmia:
Mbstring-toimintojen käyttäminen saattaa joskus aiheuttaa häirintää. Keskustelen tässä joistakin monitavuisten toimintojen ylikuormituksen käytön ongelmista. Mietitään skenaario.
Olet ottanut käyttöön mbstring.func_overload-vaihtoehdon php.ini-tiedostossasi. Työsi sujuu hyvin. Olet ylikuormittamassa yksitavuista merkkijonofunktiota monitavuisilla merkkijonofunktioilla. Mutta mitä tapahtuu, jos tarvitset ulkoisen kirjaston, joka käyttää usein jotain merkkijonofunktiota?
Tähän ongelmaan on ratkaisu. Voit käyttää tiedostoa mbstring.internal_coding. Kun soitat johonkin ulkoiseen kirjastoon, se käyttää yksitavuista koodausta ja kun palaat projektiisi, monitavuinen koodaus otetaan käyttöön. Mutta mitä tapahtuu, jos projektisi ja ulkoisen kirjaston välillä on takaisinsoitto? Se epäonnistuu täällä.
Joten sinun on pidettävä mielessä nämä ongelmat käyttäessäsi mbstring-asetuksia.
Mbstringin merkitys verkkokehityksessä:
Minkä tahansa kansainvälisen verkkosovelluksen kehittämiseksi mbstringin käyttö on välttämätöntä. Muussa tapauksessa hakemuksesi rajoittuu tiettyihin maihin ja kieliin. Kehittäjänä suosittelen sinua hankkimaan tietoa tästä toimialueesta ja tekemään itsestäsi tehokkaan verkko-ohjelmoijana.