Mbstringiä ja PHP:tä on käytettävä verkkosovelluskehityksessä

1

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.

: 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