"Menggunakan pengekodan UTF-8 secara konsisten"
P粉752479467
2023-08-21 21:15:56
<p>
Saya sedang menyediakan pelayan baharu dan mahukan sokongan penuh UTF-8 dalam aplikasi web saya. Saya telah mencuba ini sebelum ini pada pelayan sedia ada tetapi sentiasa perlu kembali ke ISO-8859-1. </p>
<p>Di manakah saya perlu menetapkan pengekodan/set aksara? Saya tahu saya perlu mengkonfigurasi Apache, MySQL dan PHP untuk mencapai ini - adakah terdapat beberapa senarai semak standard yang boleh saya ikuti, atau di mana ketidakpadanan boleh diketepikan? </p>
<p>Ini ialah pelayan Linux baharu yang menjalankan MySQL 5, PHP 5 dan Apache 2. </p>
Saya ingin menambah jawapan cemerlang chazomaticus:
Juga jangan lupa tag META (seperti ini, atau versi HTML4 atau XHTML):
Ini mungkin kelihatan remeh, tetapi IE7 memberi saya masalah sebelum ini.
Saya melakukan semuanya dengan betul; pangkalan data, sambungan pangkalan data dan pengepala HTTP Jenis Kandungan semuanya ditetapkan kepada UTF-8, yang berfungsi dengan baik dalam semua penyemak imbas lain, tetapi Internet Explorer masih berkeras untuk menggunakan pengekodan "Eropah Barat".
Ternyata halaman tersebut tiada tag META. Selepas menambahnya, masalah itu telah diselesaikan.
Editor:
W3C sebenarnya mempunyai bahagian yang cukup besar khusus untuk I18N. Mereka mempunyai banyak artikel yang berkaitan dengan isu ini - menerangkan aspek HTTP, (X)HTML dan CSS:
Mereka mengesyorkan menggunakan pengepala HTTP dan teg meta HTML (atau pengisytiharan XML dalam kes XHTML yang disediakan sebagai XML).
Storan Data:
Nyatakan
utf8mb4
字符集。这使得MySQL在物理上存储和检索以UTF-8编码的值。请注意,如果指定了utf8mb4_*
排序规则(没有明确的字符集),MySQL将隐式使用utf8mb4
pengekodan pada semua jadual dan lajur teks dalam pangkalan data.Dalam versi lama MySQL (utf8 yang hanya menyokong subset aksara Unicode. Saya harap saya bergurau.
Akses data:
Dalam kod aplikasi (cth. PHP), tidak kira kaedah capaian pangkalan data yang anda gunakan, anda perlu menetapkan set aksara sambungan kepada
utf8mb4
. Dengan cara ini, MySQL tidak melakukan sebarang penukaran kepada UTF-8 asalnya apabila ia menghantar data kepada aplikasi atau sebaliknya.Sesetengah pemandu menyediakan mekanisme mereka sendiri untuk mengkonfigurasi set aksara sambungan, yang kedua-duanya mengemas kini keadaan dalamannya sendiri dan memberitahu MySQL untuk menggunakan pengekodan pada sambungan - ini biasanya pendekatan pilihan. Dalam PHP:
Jika anda menggunakan lapisan PDOabstraksi untuk PHP ≥ 5.3.6, anda boleh nyatakan dalam DSN
charset
:Jika anda menggunakan mysqli, anda boleh menghubungi
set_charset()
:Jika anda hanya mempunyai akses kepada mysql tulen, tetapi kebetulan menjalankan PHP ≥ 5.2.3, anda boleh menghubungi
mysql_set_charset
.Jika pemandu tidak menyediakan mekanisme sendiri untuk menetapkan set aksara sambungan, anda mungkin perlu mengeluarkan pertanyaan untuk memberitahu aplikasi MySQL bagaimana anda mahu data pada sambungan dikodkan:
SET NAMES 'utf8mb4'
.Pertimbangan yang sama seperti di atas berkenaan
.utf8mb4
/utf8
/Output
:🎜Content-Type: text/html; charset=utf-8
。您可以通过在php.ini中设置default_charset
(首选)或手动使用header()
untuk dicapai.json_encode()
对输出进行编码时,将JSON_UNESCAPED_UNICODE
sebagai hujah kedua.Masuk :
mb_check_encoding()
boleh melakukan ini, tetapi anda perlu tegas untuk menggunakannya. Tidak ada jalan untuk mengatasi masalah ini, kerana pelanggan berniat jahat boleh menyerahkan data dalam mana-mana pengekodan yang mereka mahukan, dan saya tidak menemui cara untuk memastikan PHP melakukan ini untuk anda.Nota kod lain:
Jelas sekali, semua fail yang anda akan berikan (PHP, HTML, JavaScript, dll.) hendaklah dikodkan dalam UTF-8 yang sah.
Anda perlu memastikan anda melakukannya dengan selamat setiap kali anda mengendalikan rentetan UTF-8. Ini adalah bahagian yang sangat sukar. Anda mungkin perlu menggunakan sambungan
mbstring
PHP secara meluas.Operasi rentetan terbina dalam PHP tidak selamat UTF-8 secara lalai. Anda boleh melakukan beberapa operasi dengan selamat menggunakan operasi rentetan PHP biasa seperti penggabungan, tetapi untuk kebanyakan operasi anda harus menggunakan fungsi
mbstring
yang setara.Untuk memahami perkara yang anda lakukan (iaitu: jangan kacau), anda benar-benar perlu memahami UTF-8 dan cara ia berfungsi pada tahap yang paling rendah. Semak mana-mana pautan di utf8.com untuk mendapatkan sumber hebat tentang semua yang anda perlu pelajari.