mata teras
$a∩b
$Ʃxy
sokongan unicode dalam php $Δx
mbstring
Kekurangan PHP Sokongan Unicode/Multi-byte bermakna fungsi pemprosesan rentetan standard merawat rentetan sebagai urutan watak tunggal. Malah, manual PHP rasmi mentakrifkan rentetan dalam PHP sebagai "satu siri watak, salah satunya adalah sama dengan bait". PHP hanya menyokong aksara 8-bit, sementara Unicode (dan banyak set watak lain) mungkin memerlukan pelbagai bait untuk mewakili watak. Batasan PHP ini menjejaskan hampir semua aspek operasi rentetan, termasuk (tetapi tidak terhad kepada) pengekstrakan substring, menentukan panjang rentetan, segmentasi rentetan, pencampuran dan sebagainya. Usaha untuk menyelesaikan masalah ini bermula pada awal tahun 2005, tetapi pada tahun 2010, kerja -kerja membawa sokongan Unicode asli kepada PHP dihentikan dan ditangguhkan untuk pelbagai sebab. Oleh kerana sokongan Unicode asli di PHP boleh mengambil masa bertahun -tahun untuk dilaksanakan (jika ia berlaku), pemaju mesti bergantung pada sambungan yang ada seperti mbstring
dan iconv
untuk mengisi jurang ini, tetapi sambungan ini hanya menawarkan sokongan Unicode yang terhad. Perpustakaan ini bukan unicode-centric dan juga boleh ditukar antara pengekodan bukan unicode. Mereka membuat sumbangan positif untuk memudahkan pemprosesan rentetan Unicode. Walau bagaimanapun, lanjutan di atas juga mempunyai beberapa kelemahan. Mereka hanya menyediakan keupayaan pemprosesan rentetan Unicode yang terhad, dan tiada seorang pun daripada mereka didayakan secara lalai. Pentadbir pelayan mesti secara eksplisit membolehkan mana -mana atau semua sambungan untuk mengaksesnya melalui aplikasi PHP. Penyedia hosting yang dikongsi sering membuat keadaan lebih teruk dengan memasang satu atau dua sambungan, yang menjadikannya sukar bagi pemaju untuk bergantung kepada API yang selalu tersedia untuk memenuhi keperluan Unicode mereka. Namun, berita baiknya ialah PHP boleh mengeluarkan teks Unicode. Ini kerana PHP tidak benar -benar peduli sama ada kita menghantar teks bahasa Inggeris yang dikodkan dalam ASCII atau teks lain milik bahasa yang wataknya dikodkan dalam pelbagai bait. Mengetahui ini, pemaju PHP kini hanya memerlukan API yang menyediakan manipulasi rentetan berasaskan Unicode yang selesa.
Portable UTF-8
Penyelesaian baru -baru ini adalah untuk membuat perpustakaan ruang pengguna yang ditulis dalam PHP. Walaupun tahap pelayan/bahasa tidak mempunyai sokongan, perpustakaan ini dapat dengan mudah dibundel dengan aplikasi untuk memastikan kehadiran sokongan Unicode. Banyak aplikasi sumber terbuka sudah termasuk perpustakaan mereka sendiri seperti ini, dan banyak lagi menggunakan perpustakaan pihak ketiga percuma; Portable UTF-8 adalah perpustakaan ringan percuma yang dibina di atas mbstring
dan iconv
. Ia memanjangkan fungsi kedua-dua sambungan ini, menyediakan kira-kira 60 fungsi manipulasi, ujian dan pengesahan berasaskan Unicode; Seperti namanya, UTF-8 mudah alih menggunakan UTF-8 sebagai skim pengekodan watak utamanya. Perpustakaan menggunakan sambungan yang tersedia (mbstring
dan iconv
) untuk alasan kelajuan dan jambatan beberapa ketidakkonsistenan apabila menggunakannya secara langsung, tetapi jika tidak ada sambungan ini pada pelayan, ia akan kembali menggunakan php tulen UTF-8 yang ditulis secara rutin . Portable-UT8 sepenuhnya mudah alih dan boleh digunakan dengan mana-mana pemasangan Php 4.2 atau lebih baru.
Pemprosesan berdiri menggunakan UTF-8 mudah alih
editor teks dengan sokongan Unicode yang lemah boleh merosakkan teks apabila membaca teks, dan teks yang disalin dan disisipkan ke dalam bentuk web dari editor sedemikian mungkin menjadi sumber UTF-8 yang tidak sah untuk permohonan itu. Apabila memproses input pengguna yang dikemukakan, pastikan anda memastikan input adalah tepat selaras dengan jangkaan aplikasi. Untuk mengesan sama ada teks itu sah UTF-8, anda boleh menggunakan fungsi is_utf8()
perpustakaan.
if (is_utf8($_POST['title'])) { // 执行某些操作... }
Memulihkan watak-watak dari bait tidak sah adalah mustahil, jadi mengeluarkan bait yang tidak diiktiraf sebagai aksara UTF-8 yang sah mungkin satu-satunya pilihan anda. Fungsi utf8_clean()
boleh digunakan untuk menghilangkan bait yang tidak sah.
$title = utf8_clean($_POST['title']);
Setiap watak Unicode boleh dikodkan sebagai entiti HTML yang sepadan, dan anda mungkin mahu menyandikan teks dengan cara ini untuk membantu mencegah serangan XSS sebelum mengeluarkannya ke penyemak imbas.
echo utf8_html_encode($title);
Biasanya, ruang dipotong pada awal dan akhir rentetan. Unicode menyenaraikan kira-kira 20 aksara ruang, dan beberapa watak kawalan berasaskan ASCII juga harus dianggap objek yang perlu dipangkas.
$title = utf8_trim($title);
Sebaliknya, pendua ruang tersebut mungkin wujud di tengah -tengah rentetan dan harus dipadamkan. Berikut ini menunjukkan cara menggunakan utf8_remove_duplicates()
dan utf8_ws()
dalam kombinasi:
$title = utf8_remove_duplicates($title, utf8_ws());
Penyelesaian tradisional untuk membuat serpihan URL untuk tujuan SEO menggunakan transliterasi dan menghilangkan semua aksara bukan ASCII dari serpihan. Ini menjadikan URL kurang berharga daripada itu. Walaupun URL dapat menyokong watak-watak yang dikodkan oleh UTF-8, tanpa penyingkiran atau transliterasi, kita boleh membuat coretan kaya yang mengandungi aksara dalam bahasa mana pun:
$slug = utf8_url_slug($title, 30); // 字符长度30
Dari permulaan pengesahan input untuk menyimpan data ke pangkalan data, aplikasi yang dibolehkan Unicode memberi tumpuan kepada watak dan panjang aksara, bukan byte dan byte panjang. Peralihan fokus ini memerlukan antara muka baru untuk memahami perbezaan ini. Ia biasanya perlu untuk mengehadkan panjang aksara input, jadi jika input lebih daripada 60 aksara panjang, kami akan membuat substring.
if (utf8_strlen($title) > 60) { $title = utf8_substr($title, 0, 60); }
atau:
if (!utf8_fits_inside($title , 60)) { $title = utf8_substr($title, 0 ,60); }
Terdapat tiga cara yang berbeza untuk mengakses watak tunggal menggunakan perpustakaan mudah alih-UT8. Kita boleh menggunakan utf8_access()
untuk mengakses watak tunggal.
echo '第六个字符是:' . utf8_access($string, 5);
utf8_chr_map()
Membolehkan akses iteratif satu aksara menggunakan fungsi panggil balik.
utf8_chr_map('some_callback', $string);
kita boleh membahagikan rentetan ke dalam array aksara menggunakan utf8_split()
dan memproses elemen array sebagai watak tunggal.
array_map('some_callback', utf8_split($string));
Latihan Unicode juga memerlukan kita untuk mencari titik kod minimum/maksimum dalam rentetan, segmen rentetan, proses penanda pesanan byte, penukaran kes rentetan, rawak/pencampuran, penggantian, dll. Semua ini disokong oleh mudah alih-UT8.
Kesimpulan
Pembangunan Php 6 telah dihentikan, mengakibatkan keperluan jangka panjang untuk sokongan unicode asli ditangguhkan, yang penting untuk pembangunan aplikasi berbilang bahasa. Oleh itu, sambungan pelayan dan perpustakaan ruang pengguna seperti UTF-8 mudah alih memainkan peranan penting dalam membantu pemaju membuat web standard yang lebih baik untuk memenuhi keperluan tempatan.
(bahagian Soalan Lazim ditinggalkan di sini kerana batasan ruang)
Atas ialah kandungan terperinci Membawa Unicode ke PHP dengan UTF-8 mudah alih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!