Rumah > Soal Jawab > teks badan
P粉8541192632023-08-28 11:11:30
Saya ingin menambah satu perkara kepada jawapan yang sangat baik 一个>chazomaticus:
Juga 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, 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 mempunyai bahagian yang cukup 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 bertindak sebagai XML).
P粉7636623902023-08-28 09:05:50
Storan Data:
Nyatakan utf8mb4
character set on all tables and text columns in your database. This makes MySQL physically store and retrieve values encoded natively in UTF-8. Note that MySQL will implicitly use utf8mb4
encoding if a utf8mb4_*
himpunan ditentukan (tanpa set aksara eksplisit).
Dalam versi lama MySQL (< 5.5.3), malangnya anda akan terpaksa menggunakan utf8
, yang hanya menyokong subset aksara Unicode.
Akses Data:
Dalam kod aplikasi anda (cth. PHP), dalam apa jua kaedah akses DB yang anda gunakan, anda perlu menetapkan set aksara sambungan kepada utf8mb4
Dengan cara ini, MySQL tidak melakukan penukaran daripada UTF-8 asalnya apabila ia menyerahkan data kepada permohonan anda 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 abstraksi PDO dengan PHP ≥ 5.3.6, anda boleh tentukan charset
dalam DSN:
$dbh = new PDO('mysql:charset=utf8mb4');
Jika anda menggunakan mysqli, anda boleh menghubungi set_charset()
:
$mysqli->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($link, 'utf8mb4'); // procedural style
Jika anda terjebak dengan plain mysql 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 MySQL bagaimana aplikasi anda menjangkakan data pada sambungan akan dikodkan: SET NAMES 'utf8mb4'
.
Pertimbangan yang sama berkenaan utf8mb4
/utf8
/
Output
: 🎜Content-Type: text/html; charset=utf-8
. You can achieve that either by setting default_charset
in php.ini (preferred), or manually using header()
.json_encode()
, add JSON_UNESCAPED_UNICODE
sebagai parameter kedua.Masuk :
mb_check_encoding()
melakukan helah, tetapi anda perlu menggunakannya secara religius. Tiada cara untuk mengatasinya, kerana pelanggan yang berniat jahat boleh menyerahkan data dalam pengekodan apa sahaja yang mereka mahu, dan saya tidak menemui helah untuk membuat PHP melakukan ini untuk anda dengan pasti.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 bahawa setiap kali anda memproses rentetan UTF-8, anda melakukannya dengan selamat, malangnya, ini adalah bahagian yang sukar anda mungkin ingin menggunakan sambungan mbstring
secara meluas.
Untuk mengetahui perkara yang anda lakukan (baca: jangan kacau), anda benar-benar perlu memahami UTF-8 dan cara ia berfungsi pada tahap paling rendah yang mungkin. Semak mana-mana pautan di utf8.com untuk mendapatkan beberapa sumber hebat tentang semua yang anda perlu ketahui. mbstring