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!