Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah preg_match() Offset dalam Bait, Bukan Aksara, Walaupun dengan Sokongan UTF-8?

Mengapakah preg_match() Offset dalam Bait, Bukan Aksara, Walaupun dengan Sokongan UTF-8?

DDD
Lepaskan: 2024-12-06 05:35:19
asal
159 orang telah melayarinya

Why are preg_match() Offsets in Bytes, Not Characters, Even with UTF-8 Support?

PREG_OFFSET_CAPTURE dan Rentetan UTF-8: Ketakpadanan Pengiraan Bait

Apabila memadankan rentetan UTF-8 menggunakan preg_match() dengan parameter PREG_OFFSET_CAPTURE, pengguna mungkin menghadapi masalah yang tidak dijangka tingkah laku di mana offset dikira dalam bait dan bukannya aksara. Walaupun menggunakan pengubah suai u, yang membolehkan sokongan UTF-8 untuk kedua-dua corak dan subjek, ofset yang ditangkap kekal berasaskan bait.

Menyelesaikan Isu Pengiraan Bait

Untuk menangani percanggahan ini dan dapatkan offset berasaskan aksara, penyelesaian yang melibatkan mb_strlen boleh digunakan. Fungsi ini menyediakan kiraan aksara UTF-8 untuk subrentetan tertentu. Dengan menggunakan mb_strlen pada subrentetan rentetan subjek sebelum padanan yang dirakam, kami boleh mendapatkan offset aksara yang tepat.

Berikut ialah contoh yang diubah suai:

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo mb_strlen(substr($str, 0, $a_matches[0][1])); // Outputs 1
Salin selepas log masuk

Dengan memasukkan mb_strlen, kami memastikan bahawa offset mewakili kedudukan aksara dalam rentetan UTF-8, memberikan hasil yang tepat dan dijangka.

Atas ialah kandungan terperinci Mengapakah preg_match() Offset dalam Bait, Bukan Aksara, Walaupun dengan Sokongan UTF-8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan