PHP Çokbaytlı dize ayrıştırma

2 Cevap php

Ben, devlet makinesinin dayalı bir (HTML) ayrıştırıcı yazmak istiyorum ama ben acctually bir girişi / okuma nasıl kullanılacağını şüphelerim var. Ben bir dizeye bütün girdi yüklemek ve daha sonra bir dizi olarak onunla çalışmak ve mevcut ayrıştırma pozisyon olarak indeksini tutmaya karar verdi.

Orada tek bayt kodlama ile hiçbir sorun olurdu, ama çok bayt kodlama her değeri bir karakteri temsil etmez, ama bir karakterin bir bayt.

Example:

$mb_string = 'žščř'; //4 multi-byte characters in UTF-8

for($i=0; $i < 4; $i++)
{
   echo $mb_string[$i], PHP_EOL;
}

Outputs:

Ĺ
ž
Ĺ
Ą

Bu benim bir karakter ya da değil ortasında isem asla bilemezsiniz çünkü ben tek karakterleri kontrol etmek için bir döngü dize yineleyemezsiniz anlamına gelir.

Yani sorular şunlardır:

  • How do I multi-byte safe read a single character from a string in a performance friendly way?
  • Is it good idea to work with the string as it was an array in this case?
  • Nasıl girdi okumak istiyorsunuz?

2 Cevap

http://php.net/mb_string aradığınız şey

  • Sadece mb_substr karakterleri tek tek
  • kadar değil PHP6
  • tam olarak ne girdi? Genel olarak her zamanki gibi

Mdb_relatedFunctions kullanmadan ve çoklu-bayt kodlanmış dizeleri ile kodlama için kullanılan bayt katları okumak standart alt dize işlevlerini kullanabilirsiniz.

UTF-8 kodlanmış (2 byte) dizesi Örneğin dize gelen ilk karakteri gerekiyorsa

$string = 'žščř'; //4 multi-byte characters in UTF-8

Sen $ string [0] ve $ string [1] değerleri almak zorunda, bu yüzden aslında (ilk karakter için) indeksleri 0 ve 1 arasındaki substring arıyoruz.

O $ dize Not [0] veya $ string [N] ilk (multi-byte string veya N. bayt) referans olacak

Saygılarımızla,