Rumah > Soal Jawab > teks badan
P粉1847475362023-08-22 15:24:08
Saya ingin menambah jawapan cemerlang chazomaticus:
Jangan lupa teg META (seperti ini, atau versi HTML4 atau XHTMLnya):
<meta charset="utf-8">
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 dan berfungsi dengan baik dalam semua penyemak imbas lain, tetapi Internet Explorer masih berkeras untuk menggunakan pengekodan "Eropah Barat".
Ternyata halaman tersebut tiada tag META. Masalah telah diselesaikan selepas menambahkannya.
Editor:
Malah, W3C mempunyai section yang agak besar khusus untuk I18N. Mereka mempunyai beberapa 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).
P粉0329772072023-08-22 11:53:19
Storan Data:
Nyatakan utf8mb4
字符集。这使得MySQL在物理上存储和检索以UTF-8编码的值。请注意,如果指定了utf8mb4_*
校对(没有任何显式字符集),MySQL将隐式使用utf8mb4
pengekodan pada semua jadual dan lajur teks dalam pangkalan data.
Dalam versi lama MySQL (<5.5.3) anda perlu menggunakan utf8
yang hanya menyokong subset aksara Unicode. Saya harap saya bergurau.
Akses data:
Dalam kod aplikasi (cth. PHP), anda perlu menetapkan set aksara sambungan kepada utf8mb4
tanpa mengira kaedah capaian pangkalan data yang digunakan. Dengan cara ini, MySQL tidak melakukan sebarang penukaran daripada UTF-8 asalnya apabila menghantar data ke aplikasi dan sebaliknya.
Sesetengah pemandu menyediakan mekanisme mereka sendiri untuk mengkonfigurasi set aksara sambungan, yang kedua-duanya mengemas kini keadaan dalamannya sendiri dan memaklumkan MySQL tentang pengekodan untuk digunakan pada sambungan - ini biasanya pendekatan pilihan. Dalam PHP:
Jika anda menggunakan lapisan PDOabstraksi untuk PHP ≥ 5.3.6, anda boleh nyatakan dalam DSNcharset
:
$dbh = new PDO('mysql:charset=utf8mb4');
Jika anda menggunakan mysqli, anda boleh menghubungi set_charset()
:
$mysqli->set_charset('utf8mb4'); // 面向对象风格 mysqli_set_charset($link, 'utf8mb4'); // 过程化风格
Jika anda terperangkap dalam mysql tulen tetapi kebetulan menjalankan PHP ≥ 5.2.3, anda boleh menghubungi mysql_set_charset
.
Jika pemandu tidak menyediakan mekanismenya sendiri untuk menetapkan set aksara sambungan, anda mungkin perlu mengeluarkan pertanyaan untuk memberitahu aplikasi MySQL pengekodan yang diharapkan data pada sambungan: SET NAMES 'utf8mb4'
.
Pertimbangan yang sama berkenaan utf8mb4
/utf8
/
Output
:🎜Content-Type: text/html; charset=utf-8
。您可以通过在php.ini中设置default_charset
(首选)或手动使用header()
. json_encode()
对输出进行编码时,将JSON_UNESCAPED_UNICODE
sebagai parameter kedua. Masuk :
mb_check_encoding()
boleh menyelesaikan masalah ini, tetapi anda perlu menggunakannya dengan ketat. Tidak ada jalan untuk mengatasi masalah ini, kerana pelanggan berniat jahat boleh menyerahkan data dalam mana-mana pengekodan yang mereka mahu, dan saya tidak menemui helah 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 mengetahui perkara yang anda lakukan (iaitu tidak 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 mempelajari semua yang anda perlu ketahui.