Saya sedang menyediakan pelayan baharu dan mahukan sokongan penuh UTF-8 dalam aplikasi web saya. Saya telah mencuba ini pada masa lalu pada pelayan sedia ada, tetapi selalu nampaknya terpaksa kembali ke ISO-8859-1.
Di manakah saya perlu menetapkan pengekodan/charset? Saya tahu saya perlu mengkonfigurasi Apache, MySQL dan PHP untuk melakukan ini - adakah terdapat beberapa senarai semak standard yang boleh saya ikuti, atau mungkin menyelesaikan masalah di mana ketidakpadanan berlaku?
Ini berfungsi pada pelayan Linux baharu yang menjalankan MySQL 5, PHP, 5 dan Apache 2.
Saya ingin menambah satu perkarakepada jawapan yang sangat baik 一个>chazomaticus:
Juga jangan lupa teg META (seperti ini, atauversi HTML4 atau XHTMLnya):
Ini mungkin kelihatan remeh, tetapi IE7 telah 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. Menambahnya menyelesaikan masalah.
Editor:
W3C sebenarnya mempunyaibahagianyang cukup besar khusus untuk I18N. Mereka mempunyai beberapa artikel yang berkaitan dengan isu ini - menerangkan aspek HTTP, (X)HTML dan CSS:
Mereka mengesyorkan menggunakan kedua-dua pengepala HTTP dan teg meta HTML (atau pengisytiharan XML dalam kes XHTML bertindak sebagai XML).
Storan Data:
Nyatakan
utf8mb4
字符集。这使得 MySQL 物理存储和检索以 UTF-8 原生编码的值。请注意,如果指定了utf8mb4_*
排序规则(没有任何显式字符集),MySQL 将隐式使用utf8mb4
pengekodan untuk semua jadual dan lajur teks dalam pangkalan data.Dalam versi MySQL yang lebih lama (utf8, ia hanya menyokong subset aksara Unicode. Saya harap saya bergurau.
Akses Data:
Dalam kod aplikasi anda (cth. PHP), tidak kira kaedah akses pangkalan data yang anda gunakan, anda perlu menetapkan set aksara sambungan kepada
. Dengan cara ini, apabila MySQL menghantar data ke aplikasi anda, ia tidak menukar daripada UTF-8 asalnya atau sebaliknya.utf8mb4
utf8mb4Jika anda menggunakan lapisan abstraksiPDODSN
:Jika anda menggunakanmysqli, anda boleh menghubungi
set_charset()
set_charset()Jika anda berkeras untuk menggunakanmysql
biasa tetapi kebetulan menjalankan PHP ≥ 5.2.3, anda boleh menghubungi 代码>
mysql_set_charset
Tetapkan nama 'utf8mb4'设置名称'utf8mb4'
Jika pemandu tidak menyediakan mekanisme sendiri untuk menetapkan set aksara sambungan, anda mungkin perlu mengeluarkan pertanyaan untuk memberitahu MySQL bagaimana aplikasi anda menjangkakan data pada sambungan akan dikodkan:utf8mb4
/utf8
/utf8seperti yang dinyatakan di atas.
Output:Content-Type:text/html;字符集=utf-8
。您可以通过设置default_charset code>
在 php.ini 中(首选),或手动使用header()
.json_encode()
对输出进行编码时,添加JSON_UNESCAPED_UNICODE
sebagai hujah kedua.Masuk:
mb_check_encoding()
PHP melakukan perkara berikut: helah, tetapi anda perlu menggunakannya secara agama. Tidak ada cara untuk mengatasinya, kerana pelanggan yang berniat jahat boleh menyerahkan data dalam mana-mana pengekodan yang mereka mahu, dan saya tidak menemui helah untuk mendapatkan PHP melakukan ini dengan pasti untuk anda.Nota kod lain:
Jelas sekali, semua fail yang anda akan berikan (PHP, HTML, JavaScript, dll.) hendaklah dikodkan menggunakan UTF-8 yang sah.
Anda perlu memastikan anda selamat setiap kali anda mengendalikan rentetan UTF-8. Malangnya, ini adalah bahagian yang paling sukar. Anda mungkin mahu menggunakan sambungan
mbstring
PHP secara meluas.Secara lalai, operasi rentetan terbina dalam PHPtidakUTF-8 selamat.Anda boleh melakukan beberapa operasi dengan selamat (seperti penggabungan) menggunakan manipulasi rentetan PHP biasa, tetapi untuk kebanyakan kes anda harus menggunakan fungsi
mbstring
yang setara.Untuk mengetahui perkara yang anda lakukan (baca: jangan kacau), anda benar-benar perlu memahami UTF-8 dan cara ia berfungsi pada tahap yang paling rendah. Semak mana-mana pautan diutf8.comuntuk mendapatkan beberapa sumber hebat tentang semua yang anda perlu ketahui. p>