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
Linda Hamiltonasal
2024-12-03 20:24:19300semak imbas

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!"

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

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!

Kenyataan:
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