Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Mendapatkan Offset Aksara yang Betul dalam Rentetan UTF-8 Selepas preg_match() dengan PREG_OFFSET_CAPTURE?

Bagaimana untuk Mendapatkan Offset Aksara yang Betul dalam Rentetan UTF-8 Selepas preg_match() dengan PREG_OFFSET_CAPTURE?

Linda Hamilton
Lepaskan: 2024-12-03 01:01:09
asal
966 orang telah melayarinya

How to Get the Correct Character Offset in UTF-8 Strings After a preg_match() with PREG_OFFSET_CAPTURE?

Dapatkan Kiraan Aksara Berbilang Bait Sebelum Perlawanan dengan preg_match()

Masalah:

Apabila membuat persembahan padanan ungkapan biasa pada rentetan yang dikodkan UTF-8 menggunakan preg_match() dengan Parameter PREG_OFFSET_CAPTURE, pengimbangan yang terhasil dikira dalam bait, bukan kiraan aksara. Ini boleh menjadi masalah apabila memadankan aksara berbilangbait, kerana panjang baitnya mungkin berbeza daripada panjang aksaranya.

Sebagai contoh, menggunakan kod berikut untuk memadankan aksara "H" dalam rentetan yang dikodkan UTF-8, yang terhasil offset ialah 2, walaupun aksara "H" berada pada indeks 1:

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

Resolusi:

Untuk mendapatkan pengimbangan kiraan aksara yang betul, gunakan mb_strlen() untuk menentukan panjang subrentetan sehingga padanan:

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

Ini akan mengira offset dalam aksara UTF-8, memberikan hasil yang betul.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Offset Aksara yang Betul dalam Rentetan UTF-8 Selepas preg_match() dengan PREG_OFFSET_CAPTURE?. 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