Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengendalikan Offset Aksara UTF-8 dengan `preg_match()` dan `PREG_OFFSET_CAPTURE` PHP?
PREG_OFFSET_CAPTURE dan Watak Multibait: Mengatasi Percanggahan Kiraan
Apabila menggunakan preg_match() dengan pengubah suai u, kedua-dua corak dan subjek ditafsirkan sebagai UTF-8 dikodkan. Walau bagaimanapun, ofset yang ditangkap masih dikira dalam bait, walaupun dengan pengubah suai ini. Percanggahan ini boleh menyebabkan kekeliruan apabila menjangkakan indeks berasaskan aksara UTF-8.
Sifat PHP Mengira Bait dalam PREG_OFFSET_CAPTURE
Walaupun preg_match() merawat aksara Unicode, PREG_OFFSET_CAPTURE masih dilaksanakan dengan mekanisme pengiraan bait. Ini bermakna aksara dengan perwakilan multibait, seperti UTF-8, dikira sebagai bait individu dan bukannya aksara komposit.
Penyelesaian: Menggunakan mb_strlen
Untuk mendapatkan yang sesuai indeks berasaskan aksara dalam rentetan UTF-8, anda boleh memanfaatkan fungsi mb_strlen(). Fungsi ini boleh memberikan panjang rentetan UTF-8 dalam aksara. Dengan memasukkan ini ke dalam kod anda, anda boleh menterjemahkan offset berasaskan bait daripada PREG_OFFSET_CAPTURE ke dalam indeks aksara UTF-8 yang sepadan:
$str = "\xC2\xA1Hola!"; preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE); echo mb_strlen(substr($str, 0, $a_matches[0][1])); // Output: 1
Dalam contoh ini, mb_strlen() mengira panjang aksara rentetan ke atas kepada offset yang diperoleh daripada PREG_OFFSET_CAPTURE, dengan itu memberikan indeks UTF-8 yang betul. Penyelesaian ini memastikan pengiraan aksara yang tepat, seperti yang dijangkakan apabila bekerja dengan rentetan Unicode.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Offset Aksara UTF-8 dengan `preg_match()` dan `PREG_OFFSET_CAPTURE` PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!