Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mendapatkan Kiraan Aksara Berbilangbait dengan Betul Sebelum `preg_match()`?

Bagaimana untuk Mendapatkan Kiraan Aksara Berbilangbait dengan Betul Sebelum `preg_match()`?

Susan Sarandon
Susan Sarandonasal
2024-12-08 09:11:15747semak imbas

How to Correctly Get Multibyte Character Count Before a `preg_match()`?

Dapatkan Kiraan Aksara Berbilangbait sebelum Padanan dengan preg_match() (PREG_OFFSET_CAPTURE Parameter Mengira Bait Tidak Bermanfaat)

Dalam rentetan yang dikodkan UTF-8, preg_match () boleh melaporkan offset aksara yang salah dalam padanan yang ditangkap apabila menggunakan parameter PREG_OFFSET_CAPTURE. Sebabnya ialah offset yang ditangkap dikira dalam bait, walaupun rentetan subjek ditafsirkan sebagai UTF-8 dengan pengubah suai "u".

Penyelesaian:

Untuk mendapatkan offset aksara yang betul dalam padanan yang ditangkap UTF-8, gunakan mb_strlen untuk mengira kiraan aksara berdasarkan UTF-8 bait offset:

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

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kiraan Aksara Berbilangbait dengan Betul Sebelum `preg_match()`?. 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