Mbstring og PHP må brukes i webapplikasjonsutvikling

0

Byte og bit er to enheter for lagring av logisk informasjon. En bit kan betraktes som ett hull, som kan fylles med en av to verdier: 0 eller 1.

En byte er en gruppering av åtte biter. Når det gjelder matematikk, er en byte i stand til å representere 256 forskjellige verdier (28).

La oss tenke på et språk, si engelsk. Den har noen tegn (a, b, c, … etc.) som er representert i en datamaskin med byte. Det totale antallet tegn på engelsk er ikke mer enn 256, så hvert tegn kan representeres ved å bruke en annen 8-bits sekvens.

Strenger er rett og slett en samling karakterer. Normalt i PHP opererer strengoperasjoner på strenger med enkeltbyte-tegn. For eksempel: det kan være lurt å sammenligne strengene "Hello" og "Hi". Med strcmpr(), vil de to strengene bli sammenlignet forutsatt at hvert tegn i strengen tar en byte.

Men tenk på et språk som har mer enn 256 tegn (for eksempel japansk), eller når vi ønsker å representere tegn fra flere språk samtidig. En byte lagring for hvert tegn er ikke nok. Det er her multi-byte-konseptet kommer inn.

En streng med japansk tekst kan føre til at strcmpr()-funksjonen returnerer en feil eller søppelverdi siden antakelsen om at én byte representerer ett tegn ikke lenger stemmer. Når vi arbeider med multibyte-kodede strenger, trenger manipulering av disse strengene spesielle funksjoner i stedet for de vanlige enkeltbyte-strengfunksjonene. For å håndtere flerbytestrenger i PHP, gir mbstring de multibytespesifikke strengfunksjonene.

Forstå UTF-8

UTF står for Unicode Transformation Format og er et kodingssystem som tar sikte på å representere hvert tegn på hvert språk i ett tegnsett. Det finnes forskjellige versjoner av UTF, noen av dem er vist nedenfor:

Encoding Format Beskrivelse
UTF-1 Kompatibel med ISO-2022, foreldet fra Unicode-standarden.
UTF-7 7-biters kodingssystem, ble hovedsakelig brukt i e-post, men ikke en del av Unicode-standarden.
UTF-8 8-bits kodingssystem, variabel bredde, og er ASCII-kompatibel.
UTF-EBCDIC 8-bits kodingssystem, variabel bredde, og er EBCDIC-kompatibelt.
UTF-16 16-bits kodingssystem, variabel bredde.
UTF-32 32-bits kodingssystem, fast bredde.

Vi bruker UTF-8 mesteparten av tiden når vi jobber med multibyte tekst, så la oss fokusere på det et øyeblikk. UTF-8 koder tegn i flere byte ved å bruke følgende skjema:

Så hvordan vet den om et tegn er lagret i én byte eller flere byte? For dette ser den på høyordensbiten til den første byten.

Kode Betydning
0xxxxxxx En enkeltbytekode
110xxxxxx En byte til følger denne byten
1110xxxx Ytterligere to byte følger denne byten
11110xxx Tre byte til følger denne byten
111110xx Fire flere byte følger denne byten
1111110x Fem flere byte følger denne byten
10xxxxxx Fortsettelse av multibyte-tegn

Hver fortsatt byte i en sekvens med flere byte starter deretter med 1 og 0 i de to mest høyordnede bitene for å gi en måte å oppdage korrupte data.

Multibyte-ekvivalenter av vanlige strengfunksjoner

For vanlig brukte strengfunksjoner, som strlen(), strops() og substr(), er det multibyte-ekvivalente funksjoner. Du bør bruke tilsvarende funksjoner når du arbeider med multibyte-strenger.

Tabell 4: Enkelbyte-ekvivalente flerbyte-strengfunksjoner

Enkel byte Multibyte Beskrivelse
strlen() mb_strlen() Få strenglengde
strpos() mb_strpos() Finn plasseringen av første forekomst av streng i en streng
substr() mb_substr() Returner en del av en streng
strtolower() mb_strtolower() Lag en liten streng
strtoupper() mb_strtoupper() Lag en streng med stor bokstav
substr_count() mb_substr_count() Tell antall forekomster av understrenger
dele() mb_split() Del strengen i array ved regulært uttrykk
post() mb_send_mail() Send kodet post
erg() mb_ereg() Match med regulære uttrykk
gjøre() mb_regi() Samsvar med regulære uttrykk som ikke skiller mellom store og små bokstaver
La meg gi et eksempel på bruk av multibyte-funksjonen:
  • Funksjonsnavn: int mb_strlen (streng $str [, streng $encoding ] )

  • Beskrivelse: Få strenglengden.

  • Parametere: str (inndatastreng hvor lengden skal bestemmes)

    koding (tegnkoding)

  • Returverdi: Antall tegn til inndatastrengen str med tegnkoding

  • Returtype: int

Eksempelkode: Her er et eksempelkode på hvordan du bruker mb_strlen-funksjonen. Her er inndatastreng et kinesisk ord og tre forskjellige tegnkodingsalternativer brukes.

$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').

Begrensninger: UTF-8 har noen begrensninger, som-

  • Teoretisk sett er UTF-8-kodede tegns høyeste lengde seks byte.
  • 0xFE og 0xFF brukes aldri i denne kodingen.

Aktiver mbstring fra php.ini :

  • Bekreft eksistensen av php_mbstring.dll i ext-mappen.
  • Uncomment ;extension=php_mbstring.dll fra php.ini (dvs. extension=php_mbstring.dll)
  • Start server på nytt.

Runtime Configuration: For å aktivere noen mbstring-funksjoner, bør noen flere innstillinger endres.

Tabell 5: Konfigurasjoner i php.ini

Navn Standardverdi Utskiftbart alternativ
mbstring.language nøytral PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order NULL PHP_INI_ALL
mbstring.http_input sende PHP_INI_ALL
mbstring.http_output sende 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

Forklaring av konfigurasjonsalternativene:

"Changeable alternativet" bestemmer verdien for endringsmodus. Den beskriver hvordan og hvor mbstring-alternativene kan endres. Her kommer betydningen av modusverdiene:

Tabell 6: Ulik endringsmodus

Modus Betydning
PHP_INI_SYSTEM Vi kan angi oppføringen ved å bruke php.ini eller httpd.conf
PHP_INI_PERDIR Vi kan angi oppføringen ved å bruke php.ini, .htaccess, httpd.conf eller .user.ini
PHP_INI_ALL Vi kan angi oppføringen fra hvor som helst
PHP_INI_USER Vi kan angi oppføringen ved hjelp av brukerskript.

Slik endrer du fra brukerskript:

Vi kan bruke følgende kode for å angi intern koding av mbstring fra brukerskript:

<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>

Slik endrer du fra php.ini:

Vi kan redigere php.ini-filen for å angi noen mbstring-alternativer.

; 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
Noen problemer knyttet til mbstring:

Bruk av mbstring-funksjoner kan noen ganger føre til trakassering for deg. Jeg vil diskutere her noen problemer med bruk av multibyte funksjon overbelastning. La oss tenke et scenario.

Du har aktivert alternativet mbstring.func_overload i php.ini-filen. Arbeidet ditt går bra. Du overbelaster enkeltbyte-strengfunksjonen med flerbyte-strengfunksjoner. Men hva vil skje hvis du trenger et eksternt bibliotek som ofte bruker en eller annen strengfunksjon?

Det finnes en løsning på dette problemet. Du kan bruke mbstring.internal_coding. Når du kaller et eksternt bibliotek, vil det bruke enkeltbyte-koding, og når du kommer tilbake til prosjektet ditt, vil multibyte-koding bli implementert. Men hva skjer hvis det er en tilbakeringing mellom prosjektet og det eksterne biblioteket? Det feiler her.

Så du må huske på disse problemene mens du bruker mbstring-alternativer.

Viktigheten av mbstring for webutvikling:

For å utvikle en internasjonal nettapplikasjon er bruk av mbstring et must. Ellers vil søknaden din være begrenset til enkelte nasjoner og språk. Som utvikler foreslår jeg at du får litt kunnskap om dette domenet og gjør deg selv effektiv som webprogrammerer.

Opptakskilde: instantshift.com

Dette nettstedet bruker informasjonskapsler for å forbedre din opplevelse. Vi antar at du er ok med dette, men du kan velge bort det hvis du ønsker det. jeg aksepterer Mer informasjon