Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah PREG_OFFSET_CAPTURE Mengembalikan Kiraan Bait Daripada Kiraan Aksara dengan UTF8 dan Pengubahsuai 'u'?

Mengapakah PREG_OFFSET_CAPTURE Mengembalikan Kiraan Bait Daripada Kiraan Aksara dengan UTF8 dan Pengubahsuai 'u'?

Linda Hamilton
Lepaskan: 2024-12-03 20:24:19
asal
295 orang telah melayarinya

Why Does PREG_OFFSET_CAPTURE Return Byte Counts Instead of Character Counts with UTF8 and the 'u' Modifier?

PREG_OFFSET_CAPTURE Mengira Bait Walaupun Ungkapan UTF8

Apabila menggunakan preg_match dengan pengubah u untuk pemprosesan UTF8, seseorang mungkin menghadapi gelagat yang tidak dijangka di mana PREG_OFFSET_CAPTURE kembali mengikut bilangan dikira.

preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1]; // Prints 2, but should be 1 for "H" in "¡Hola!"
Salin selepas log masuk

Walaupun pengubah suai u membenderakan corak dan subjek sebagai dikodkan UTF8, ofset kekal dalam bait. Untuk mendapatkan offset berasaskan aksara, anda boleh menggunakan mb_strlen:

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

Atas ialah kandungan terperinci Mengapakah PREG_OFFSET_CAPTURE Mengembalikan Kiraan Bait Daripada Kiraan Aksara dengan UTF8 dan Pengubahsuai 'u'?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan