Mbstring och PHP måste användas i webbapplikationsutveckling

0

Byte och bitar är två enheter för att lagra logisk information. En bit kan ses som ett hål, som kan fyllas med ett av två värden: 0 eller 1.

En byte är en gruppering av åtta bitar. När det gäller matematik kan en byte representera 256 olika värden (28).

Låt oss tänka på ett språk, säg engelska. Den har några tecken (a, b, c, … etc.) som representeras i en dator med byte. Det totala antalet tecken på engelska är inte mer än 256, så varje tecken kan representeras genom att använda en annan 8-bitarssekvens.

Strängar är helt enkelt en samling karaktärer. Normalt i PHP fungerar strängoperationer på strängar med en-byte-tecken. Till exempel: du kanske vill jämföra strängarna "Hello" och "Hi". Med strcmpr() kommer de två strängarna att jämföras förutsatt att varje tecken i strängen tar en byte.

Men tänk på ett språk som har mer än 256 tecken (till exempel japanska), eller när vi vill representera tecken från flera språk samtidigt. En byte lagring för varje tecken räcker inte. Det är här multi-byte-konceptet kommer in.

En sträng med japansk text kan få funktionen strcmpr() att returnera ett felaktigt eller skräpvärde eftersom antagandet att en byte representerar ett tecken inte längre stämmer. När vi arbetar med flerbytekodade strängar behöver manipuleringen av dessa strängar specialfunktioner snarare än de vanliga enbytesträngsfunktionerna. För att hantera flerbytesträngar i PHP tillhandahåller mbstring de multibytespecifika strängfunktionerna.

Förstå UTF-8

UTF står för Unicode Transformation Format och är ett kodningssystem som syftar till att representera varje tecken på varje språk i en teckenuppsättning. Det finns olika versioner av UTF, av vilka några visas nedan:

Kodningsformat Beskrivning
UTF-1 Kompatibel med ISO-2022, föråldrad från Unicode-standarden.
UTF-7 7-bitars kodningssystem, användes huvudsakligen i e-post men inte en del av Unicode-standarden.
UTF-8 8-bitars kodningssystem, variabel bredd och är ASCII-kompatibelt.
UTF-EBCDIC 8-bitars kodningssystem, variabel bredd och är EBCDIC-kompatibelt.
UTF-16 16-bitars kodningssystem, variabel bredd.
UTF-32 32-bitars kodningssystem, fast bredd.

Vi använder UTF-8 för det mesta när vi arbetar med multibytetext, så låt oss fokusera på det ett ögonblick. UTF-8 kodar tecken i flera byte med följande schema:

Så, hur vet det om ett tecken är lagrat i en byte eller flera byte? För detta tittar den på högordningens bit av den första byten.

Koda Menande
0xxxxxxx En enda byte-kod
110xxxxxx Ytterligare en byte följer efter denna byte
1110xxxx Ytterligare två byte följer denna byte
11110xxx Ytterligare tre byte följer denna byte
111110xx Ytterligare fyra byte följer denna byte
1111110x Ytterligare fem byte följer denna byte
10xxxxxx Fortsättning av multibyte-tecken

Varje fortsatt byte i en sekvens med flera byte börjar sedan med 1 och 0 i sina två mest högordningsbitar för att tillhandahålla ett sätt att upptäcka korrupta data.

Multibyte-ekvivalenter av vanliga strängfunktioner

För vanliga strängfunktioner, som strlen(), strops() och substr(), finns det flerbyte-ekvivalenta funktioner. Du bör använda motsvarande funktioner när du arbetar med flerbytesträngar.

Tabell 4: Enbyte ekvivalenta multibyte strängfunktioner

Enkel byte Multibyte Beskrivning
strlen() mb_strlen() Få stränglängd
strpos() mb_strpos() Hitta positionen för första förekomsten av sträng i en sträng
substr() mb_substr() Returnera en del av en sträng
strtolower() mb_strtolower() Gör en sträng med liten bokstäver
strtoupper() mb_strtoupper() Gör en sträng med versaler
substr_count() mb_substr_count() Räkna antalet delsträngsförekomster
dela() mb_split() Dela strängen i array med reguljärt uttryck
post() mb_send_mail() Skicka kodad post
erg() mb_ereg() Matchning av reguljära uttryck
do() mb_regi() skiftlägesokänslig matchning av reguljära uttryck
Låt mig ge ett exempel på hur man använder multibyte-funktionen:
  • Funktionsnamn: int mb_strlen (sträng $str [, sträng $encoding ] )

  • Beskrivning: Hämta strängens längd.

  • Parametrar: str (indatasträng vars längd ska bestämmas)

    kodning (teckenkodning)

  • Returvärde: Antal tecken i inmatningssträngen str med teckenkodningskodning

  • Returtyp: int

Exempelkod: Här är en exempelkod på hur man använder mb_strlen-funktionen. Här är inmatningssträngen ett kinesiskt ord och tre olika teckenkodningsalternativ används.

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

Begränsningar: UTF-8 har vissa begränsningar, som-

  • Teoretiskt sett är UTF-8-kodade teckens högsta längd sex byte.
  • 0xFE och 0xFF används aldrig i denna kodning.

Aktivera mbstring från php.ini :

  • Bekräfta förekomsten av php_mbstring.dll i ext-mappen.
  • Avkommentera ;extension=php_mbstring.dll från php.ini (dvs extension=php_mbstring.dll)
  • Starta om servern.

Runtime Configuration: För att aktivera vissa mbstring-funktioner bör ytterligare några inställningar ändras.

Tabell 5: Konfigurationer i php.ini

namn Standardvärde Föränderligt alternativ
mbstring.language neutral PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order NULL PHP_INI_ALL
mbstring.http_input passera PHP_INI_ALL
mbstring.http_output passera 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

Förklaring av konfigurationsalternativen:

"Changeable alternativet" bestämmer det föränderliga lägesvärdet. Den beskriver hur och varifrån mbstring-alternativen kan ändras. Här kommer betydelsen av lägesvärdena:

Tabell 6: Olika förändringslägen

Läge Menande
PHP_INI_SYSTEM Vi kan ställa in posten med php.ini eller httpd.conf
PHP_INI_PERDIR Vi kan ställa in posten med php.ini, .htaccess, httpd.conf eller .user.ini
PHP_INI_ALL Vi kan ställa in posten var som helst
PHP_INI_USER Vi kan ställa in posten med hjälp av användarskript.

Så här ändrar du från användarskript:

Vi kan använda följande kod för att ställa in intern kodning av mbstring från användarskript:

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

Så här ändrar du från php.ini:

Vi kan redigera filen php.ini för att ställa in några mbstring-alternativ.

; 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
Några problem relaterade till mbstring:

Att använda mbstring-funktioner kan ibland orsaka trakasserier för dig. Jag kommer här att diskutera några problem med att använda multibyte-funktionsöverbelastning. Låt oss tänka ett scenario.

Du har aktiverat alternativet mbstring.func_overload i din php.ini-fil. Ditt arbete går bra. Du överbelastas en bytesträngfunktion med flerbytesträngsfunktioner. Men vad händer om du behöver ett externt bibliotek som ofta använder någon strängfunktion?

Det finns en lösning på detta problem. Du kan använda mbstring.internal_coding. När du anropar något externt bibliotek kommer det att använda enkelbyte-kodning och när du kommer tillbaka till ditt projekt kommer multibyte-kodning att implementeras. Men vad händer om det blir en callback mellan ditt projekt och det externa biblioteket? Det misslyckas här.

Så du måste komma ihåg dessa problem när du använder mbstring-alternativ.

Betydelsen av mbstring för webbutveckling:

För att utveckla en internationell webbapplikation är användning av mbstring ett måste. Annars kommer din ansökan att vara begränsad till vissa länder och språk. Som utvecklare föreslår jag att du skaffar dig lite kunskap om denna domän och gör dig effektiv som webbprogrammerare.

Inspelningskälla: 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