Mbstring og PHP må brukes i webapplikasjonsutvikling
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.