PHP Master | Bekerja dengan rentetan multibyte
mata utama
- watak multi-bait menggunakan satu hingga empat bait untuk menentukan watak-watak, yang penting untuk perwakilan angka bahasa dengan lebih daripada 256 aksara unik. Unicode, terutamanya UTF-8, adalah skema pengekodan yang paling biasa digunakan untuk watak-watak ini.
- PHP sendiri tidak direka untuk mengendalikan aksara multibyte. Untuk memproses watak -watak ini, satu set fungsi khas, fungsi mbstring, harus digunakan. Walau bagaimanapun, pengepala HTTP PHP juga mengandungi pengenal set aksara yang boleh mengatasi tag meta halaman.
- Sokongan multi-bait bukan ciri lalai PHP dan memerlukan konfigurasi semula. Untuk mengaktifkan fungsi MB, gunakan pilihan kompilasi-mbstring-enable-mbstring dan tetapkan pilihan konfigurasi runtime mbstring-encoding_translation.
- Beberapa arahan rentetan multibyte boleh didapati di PHP, seperti MB_CHECK_ENCODING, MB_STRLEN, dan MB_EREG_SEVE, yang digunakan untuk memeriksa sama ada urutan pengekodan tertentu sah, cari bilangan aksara dalam rentetan multibyte, dan melakukan carian tradisional. Versi multibyte.
Asas
kita semua tahu bahawa "bit" boleh menjadi 0 atau 1, manakala "bait" adalah gabungan lapan bit berturut -turut. Oleh kerana terdapat lapan bit bernilai dua kali dalam bait, byte boleh dikonfigurasikan dalam jumlah 256 mod yang berbeza (kepada kuasa ke-8 2). Watak yang berbeza boleh dikaitkan dengan setiap mod 8-bit yang mungkin. Letakkan bait ini bersama -sama dalam pesanan yang berbeza dan anda mempunyai cara anda sendiri untuk berkomunikasi. Ia tidak semestinya pintar, ia bergantung kepada siapa yang berada di kedua -dua hujungnya, tetapi komunikasi itu. Selagi kita dapat menyatakan watak dalam bahasa dengan 256 watak unik atau kurang, kita berjaya. Tetapi bagaimana jika kita tidak dapat menyatakan bahasa dengan hanya 256 aksara? Atau bagaimana jika kita perlu menyatakan pelbagai bahasa dalam dokumen yang sama? Hari ini, ketika kita mendigitalkan segala yang kita dapati, 256 aksara jauh dari cukup. Nasib baik, skim watak yang lebih baik memenuhi cabaran ini telah direka. Set supercharacter baru ini menggunakan satu hingga empat bait untuk menentukan watak -watak. Hari ini, lelaki besar dalam bidang pengekodan watak adalah Unicode, yang merupakan penyelesaian yang menggunakan pelbagai bait untuk mewakili watak. Ia dibangunkan oleh Konsortium Unicode dan datang dalam beberapa versi: UTF-32 (untuk Dreadnaught Class Starship), UTF-16 (untuk Enterprise di Star Trek: Dark Unbound) dan UTF-8 (kebanyakan kita harus menggunakannya secara sebenar dunia untuk aplikasi web kami). Seperti yang saya katakan, Unicode (termasuk UTF-8) menggunakan pelbagai konfigurasi byte untuk mewakili watak. UTF-8 menggunakan satu hingga empat bait untuk menghasilkan 1,112,064 corak untuk mewakili aksara yang berbeza. Ini "watak luas" mengambil lebih banyak ruang, tetapi UTF-8 cenderung untuk memproses lebih cepat daripada beberapa skim pengekodan lain. Mengapa semua orang memuji UTF-8? Sebahagian daripada ini adalah model popular yang diketengahkan dalam iklan yang dibolehkan UTF-8 yang dilihat pada ESPN dan TCM, tetapi terutamanya kerana UTF-8 meniru ASCII, yang menjejaki ASCII dengan tepat jika anda tidak melibatkan sebarang aksara khas.
Bagaimanakah ini mempengaruhi PHP?
Saya tahu apa yang anda fikirkan. Saya hanya perlu menetapkan watak yang ditetapkan kepada "UTF-8" dalam tag meta saya dan semuanya akan baik-baik saja. Tetapi ini tidak benar. Pertama, fakta mudah ialah PHP tidak direka bentuk untuk mengendalikan aksara multibyte, jadi menggunakan fungsi rentetan standard untuk beroperasi pada watak -watak ini boleh menghasilkan hasil yang tidak menentu. Apabila kita perlu memproses aksara multibyte ini, kita perlu menggunakan satu set fungsi khas: fungsi mbstring. Kedua, walaupun anda mengawal PHP, masih ada masalah. Header HTTP yang mengatasi komunikasi anda juga mengandungi identiti set aksara, yang mengatasi kandungan dalam tag meta halaman. Jadi, bagaimanakah PHP mengendalikan watak multibyte? Terdapat dua set fungsi yang mempengaruhi rentetan multibyte. Yang pertama adalah iconv. Bermula dengan versi 5.0, ini telah menjadi bahagian lalai bahasa, cara untuk menukar satu aksara yang ditetapkan ke perwakilan set aksara yang lain. Ini bukan apa yang akan kita bincangkan dalam artikel ini. Yang kedua ialah sokongan multibyte, yang merupakan satu siri arahan yang diawali dengan "MB_". Terdapat banyak arahan ini, dan semakan cepat menunjukkan bahawa sebahagian daripada mereka berkaitan dengan menentukan sama ada watak-watak yang sesuai berdasarkan skim pengekodan yang diberikan, sementara yang lain adalah fungsi berorientasikan carian yang serupa dengan sebahagian daripada ekspresi biasa PHP tetapi fungsi multibyte.
Dayakan sokongan multibyte untuk php
Sokongan multi-bait bukanlah ciri lalai PHP, tetapi ia juga tidak memerlukan kita memuat turun mana-mana perpustakaan atau sambungan tambahan; Malangnya, jika anda menggunakan versi PHP yang diuruskan, ini mungkin bukan sesuatu yang boleh anda lakukan. Gunakan fungsi phpinfo () untuk melihat konfigurasi anda. Tatal ke bawah ke output kira -kira separuh jalan, dan akan ada seksyen yang dipanggil "mbstring". Ini akan menunjukkan sama ada ciri -ciri asas diaktifkan. Untuk maklumat mengenai cara membolehkan ciri ini, anda boleh merujuk kepada manual. Ringkasnya, anda boleh mengaktifkan fungsi MB dengan menggunakan pilihan kompilasi-mbstring yang boleh dimuatkan dan menetapkan pilihan konfigurasi runtime mbstring-encoding_translation. Sudah tentu, penyelesaian terakhir adalah Php 6, kerana ia akan menggunakan IBM (sila lepaskan topi anda) Perpustakaan ICU untuk memastikan sokongan asli untuk set watak multibyte. Apa yang perlu kita lakukan ialah duduk dan tunggu, bukan? Tetapi sehingga itu, lihat sokongan multibyte yang ada sekarang.
Perintah rentetan multi-bait
Mungkin terdapat 53 arahan rentetan multibyte yang berbeza. Mungkin ada 54. Saya agak keluar dari jalan pada satu ketika, tetapi anda mendapat apa yang saya maksudkan. Tidak perlu dikatakan, kami tidak akan menerangkannya satu demi satu, tetapi untuk bersenang -senang, mari kita lihat dengan cepat beberapa.
- mb_check_encoding
<?php $string = 'u4F60u597Du4E16u754C'; $string = json_decode('"' . $string . '"'); $valid = mb_check_encoding($string, 'UTF-8'); echo ($valid) ? 'valid' : 'invalid'; ?>
- mb_strlen
strlen () mengembalikan bilangan bait dalam rentetan. Untuk ASCII, yang merupakan satu bait, ini menjadikannya bagus untuk mencari bilangan watak. Untuk rentetan multibyte, anda perlu menggunakan fungsi mb_strlen ().
<?php $string = 'u4F60u597Du4E16u754C'; $string = json_decode('"' . $string . '"'); $valid = mb_check_encoding($string, 'UTF-8'); echo ($valid) ? 'valid' : 'invalid'; ?>
- mb_ereg_search
mb_ereg_search () melakukan versi multibyte carian watak tradisional. Tetapi terdapat beberapa kaveat - anda perlu menentukan skema pengekodan menggunakan fungsi MB_REGEX_ENCODING (), ungkapan biasa tidak mempunyai pemisah (ia hanya bahagian corak), dan kedua -dua ungkapan biasa dan rentetan ditentukan menggunakan MB_EREG_SARTH_INIT ().
<?php $string = 'u4F60u597Du4E16u754C'; $string = json_decode('"' . $string . '"'); echo strlen($string); // 输出 12 – 错误! echo mb_strlen($string, 'UTF-8'); // 输出 4 ?>
Adakah cukup?
Saya tidak tahu bagaimana anda, tetapi saya fikir dunia benar -benar memerlukan lebih banyak perkara yang mudah. Malangnya, pemprosesan multibyte tidak memenuhi keperluan ini. Tetapi buat masa ini, ini adalah sesuatu yang anda tidak boleh abaikan. Kadang -kadang anda tidak akan dapat melakukan pemprosesan rentetan PHP biasa (kerana anda cuba memproses aksara yang melebihi julat ASCII biasa (U 0000 - U 00FF). Ini bermakna anda perlu menggunakan fungsi berorientasikan MB_. Ingin mengetahui lebih lanjut? Serius, adakah anda mahu? Saya benar -benar fikir ini akan menakutkan anda. Saya tidak bersedia untuk ini. Masa saya telah tiba. Apakah pilihan terbaik anda? Lihat manual PHP. Oh, dan cuba sesuatu. Tidak ada apa -apa untuk menggantikan pengalaman sebenarnya menggunakan sesuatu.
(bahagian FAQ asal harus dikekalkan di sini kerana kandungannya sangat berkaitan dengan topik artikel dan akan mengurangkan kebolehbacaan selepas menulis semula.)
Atas ialah kandungan terperinci PHP Master | Bekerja dengan rentetan multibyte. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Alipay Php ...

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.
