Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Mengendalikan Offset Aksara UTF-8 dengan `preg_match()` dan `PREG_OFFSET_CAPTURE` PHP?

Bagaimanakah Saya Boleh Mengendalikan Offset Aksara UTF-8 dengan `preg_match()` dan `PREG_OFFSET_CAPTURE` PHP?

Barbara Streisand
Lepaskan: 2024-12-03 02:24:09
asal
778 orang telah melayarinya

How Can I Correctly Handle UTF-8 Character Offsets with PHP's `preg_match()` and `PREG_OFFSET_CAPTURE`?

PREG_OFFSET_CAPTURE dan Watak Multibait: Mengatasi Percanggahan Kiraan

Apabila menggunakan preg_match() dengan pengubah suai u, kedua-dua corak dan subjek ditafsirkan sebagai UTF-8 dikodkan. Walau bagaimanapun, ofset yang ditangkap masih dikira dalam bait, walaupun dengan pengubah suai ini. Percanggahan ini boleh menyebabkan kekeliruan apabila menjangkakan indeks berasaskan aksara UTF-8.

Sifat PHP Mengira Bait dalam PREG_OFFSET_CAPTURE

Walaupun preg_match() merawat aksara Unicode, PREG_OFFSET_CAPTURE masih dilaksanakan dengan mekanisme pengiraan bait. Ini bermakna aksara dengan perwakilan multibait, seperti UTF-8, dikira sebagai bait individu dan bukannya aksara komposit.

Penyelesaian: Menggunakan mb_strlen

Untuk mendapatkan yang sesuai indeks berasaskan aksara dalam rentetan UTF-8, anda boleh memanfaatkan fungsi mb_strlen(). Fungsi ini boleh memberikan panjang rentetan UTF-8 dalam aksara. Dengan memasukkan ini ke dalam kod anda, anda boleh menterjemahkan offset berasaskan bait daripada PREG_OFFSET_CAPTURE ke dalam indeks aksara UTF-8 yang sepadan:

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

Dalam contoh ini, mb_strlen() mengira panjang aksara rentetan ke atas kepada offset yang diperoleh daripada PREG_OFFSET_CAPTURE, dengan itu memberikan indeks UTF-8 yang betul. Penyelesaian ini memastikan pengiraan aksara yang tepat, seperti yang dijangkakan apabila bekerja dengan rentetan Unicode.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Offset Aksara UTF-8 dengan `preg_match()` dan `PREG_OFFSET_CAPTURE` PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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