Penjelasan terperinci tentang cara PHP mengira panjang rentetan bahasa Cina dengan betul

PHPz
Lepaskan: 2023-04-11 11:46:01
asal
5602 orang telah melayarinya

Dalam pengaturcaraan PHP, kita sering menghadapi senario di mana kita perlu mengira panjang rentetan. Secara amnya, kita terbiasa menggunakan fungsi strlen() atau fungsi mb_strlen() untuk mengira panjang rentetan. Walau bagaimanapun, apabila berurusan dengan rentetan Cina, kita akan mendapati bahawa akan terdapat masalah menggunakan fungsi strlen(), kerana aksara Cina tidak mengira panjang mengikut kaedah pengiraan aksara umum. Jadi bagaimana kita boleh mengira dengan betul panjang rentetan Cina dalam PHP? Mari bincangkan isu berkaitan di bawah.

1. Cara mengira panjang rentetan dalam PHP

Dalam PHP, terdapat dua cara untuk mengira panjang rentetan, satu pengiraan aksara mudah, Satu lagi dikira berdasarkan pada panjang aksara sebenar. Apabila mengira panjang rentetan, kita akan menghadapi dua situasi:

  1. ASCII aksara: Apabila mengira panjang aksara ASCII, hanya gunakan fungsi strlen() secara terus.
  2. Aksara Cina: Aksara Cina menduduki dua bait dalam Unicode dan dua bait atau tiga bait dalam GBK. Apabila mengira panjang aksara Cina, ia perlu dikira mengikut panjang sebenar aksara.

2. Masalah dengan penyalahgunaan fungsi strlen()

fungsi strlen() ialah fungsi asas dalam PHP yang digunakan untuk mengira panjang rentetan. Boleh mengembalikan panjang rentetan yang ditentukan. Walau bagaimanapun, apabila memproses rentetan Cina, akan terdapat masalah menggunakan fungsi strlen() dan pengiraan panjang akan menjadi tidak tepat. Ini kerana PHP menggunakan pengekodan ASCII secara lalai, dan untuk aksara Cina yang dikodkan Unicode, satu aksara dihuraikan kepada berbilang bait, mengakibatkan ralat semasa mengira panjang.

Sebagai contoh, apabila menggunakan fungsi strlen() untuk mengira panjang rentetan Cina "中国", hasilnya akan mengembalikan 6 dan bukannya 2 yang dijangkakan. Ini kerana fungsi strlen() akan menggabungkan Aksara Cina "中" dan "Negara" dihuraikan kepada 3 bait masing-masing.

3. Kaedah untuk menyelesaikan masalah

Memandangkan fungsi strlen() tidak boleh mengira panjang aksara Cina secara normal, bagaimanakah kita harus mengira panjang aksara Cina? Berikut ialah tiga penyelesaian yang biasa digunakan:

  1. Gunakan fungsi mb_strlen()

PHP menyediakan fungsi mb_strlen() untuk menyelesaikan masalah panjang rentetan. Fungsi mb_strlen() ialah fungsi panjang rentetan berbilang bait yang mengembalikan panjang rentetan sebenar, termasuk aksara Cina. Apabila menggunakan fungsi mb_strlen() untuk mengira panjang rentetan Cina, anda perlu memasukkan parameter kedua untuk menentukan pengekodan aksara, contohnya:

$str = '中国';
$len = mb_strlen($str, 'UTF-8'); // 返回 2
Salin selepas log masuk

Kaedah ini adalah yang paling biasa dan disyorkan , kerana fungsi mb_strlen() mempunyai Sangat boleh dibaca dan diselenggara. Ambil perhatian bahawa sambungan mbstring mesti dipasang sebelum menggunakan fungsi mb_strlen().

  1. Gunakan fungsi iconv_strlen()

fungsi iconv_strlen() boleh digunakan untuk mengira panjang rentetan dan ia juga boleh mengendalikan panjang rentetan Cina dengan betul. Struktur fungsi iconv_strlen() adalah serupa dengan fungsi strlen(), kecuali apabila mengira panjang, anda perlu memasukkan parameter kedua untuk menentukan pengekodan aksara, contohnya:

$str = '中国';
$len = iconv_strlen($str, 'UTF-8'); // 返回 2
Salin selepas log masuk

Serupa dengan fungsi mb_strlen(), gunakan fungsi iconv_strlen(), anda juga perlu mengesahkan bahawa sambungan iconv telah dipasang.

  1. Kira bilangan bait dan bahagikan dengan 2 atau 3

Selain menggunakan fungsi yang disertakan dengan PHP, kita juga boleh mengira bait aksara Cina Untuk selesaikan masalah pengiraan panjang, kaedahnya adalah seperti berikut:

$str = '中国';
$len = ceil((strlen($str) - mb_strlen($str, "UTF-8")) / 2) + mb_strlen($str, "UTF-8");
Salin selepas log masuk

Kod di atas mula-mula mengira bilangan bait aksara Cina, kemudian membahagikannya dengan panjang sebenar 2 atau 3, dan akhirnya menambah panjang aksara Inggeris, maka Panjang rentetan bahasa Cina yang betul boleh diperolehi.

4. Ringkasan

Ringkasnya, dalam pengaturcaraan PHP, pengiraan panjang rentetan bahasa Cina adalah istimewa dan memerlukan perhatian khusus kami. Untuk mengelakkan ralat, kita harus memilih kaedah pengiraan yang sesuai, seperti menggunakan fungsi mb_strlen() atau fungsi iconv_strlen() atau mengira panjang dengan mengira bilangan bait dan membahagikannya dengan 2 atau 3. Ini boleh memastikan ketepatan panjang aksara Cina dan mengelakkan ralat pengiraan dan anomali data.

Atas ialah kandungan terperinci Penjelasan terperinci tentang cara PHP mengira panjang rentetan bahasa Cina dengan betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!