"Peluk UTF-8 secara konsisten"
P粉404539732
P粉404539732 2023-08-20 20:33:50
0
2
468
<p> Saya sedang menyediakan pelayan baharu dan mahukan sokongan penuh UTF-8 dalam aplikasi web saya. Saya telah mencuba ini pada pelayan sedia ada pada masa lalu, 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 diselesaikan? </p> <p>Ini ialah pelayan Linux baharu yang menjalankan MySQL 5, PHP 5 dan Apache 2. </p>
P粉404539732
P粉404539732

membalas semua(2)
P粉497463473

Saya ingin menambah sedikit jawapan chazomaticus yang sangat baik:

Juga jangan lupa tag META (seperti ini, atau versi HTML4 atau XHTML):

<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. Selepas menambahnya, masalah itu telah diselesaikan.

Editor:

W3C sebenarnya mempunyai kawasan Pengantarabangsaan (I18N) yang cukup besar. 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 yang disediakan sebagai XML).

P粉726133917

Storan Data:

  • Nyatakan utf8mb4字符集。这样,MySQL将以UTF-8的本地编码方式物理存储和检索值。请注意,如果指定了utf8mb4_*排序规则(没有明确指定字符集),MySQL将隐式使用utf8mb4pengekodan pada semua jadual dan lajur teks dalam pangkalan data.

  • Dalam versi MySQL yang lebih lama (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 daripada UTF-8 asalnya apabila menghantar data ke aplikasi dan sebaliknya.

  • Sesetengah pemandu menyediakan mekanisme mereka sendiri untuk mengkonfigurasi set aksara sambungan, yang pada masa yang sama 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 dihadkan untuk menggunakan 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 MySQL bagaimana aplikasi anda mahu data dikodkan pada sambungan: SET NAMES 'utf8mb4'.

  • Kaveat yang sama tentang utf8mb4/utf8/

    seperti di atas terpakai di sini.

Output

:🎜
  • UTF-8 hendaklah ditetapkan dalam pengepala HTTP, seperti fungsi Content-Type: text/html; charset=utf-8。您可以通过在php.ini中设置default_charset(首选)或手动使用header().
  • Jika aplikasi anda memindahkan teks ke sistem lain, mereka perlu diberitahu pengekodan aksara juga. Untuk aplikasi web, penyemak imbas mesti diberitahu di mana pengekodan untuk menghantar data (melalui pengepala respons HTTP atau metadata HTML).
  • Gunakan json_encode()对输出进行编码时,作为第二个参数添加JSON_UNESCAPED_UNICODE.

Masuk :

  • Pelayar akan menyerahkan data dalam set aksara yang ditentukan oleh dokumen, jadi tiada pemprosesan khas diperlukan pada bahagian input.
  • Jika anda mempunyai keraguan tentang pengekodan permintaan (cth. ia mungkin telah diganggu), anda boleh mengesahkan bahawa setiap rentetan yang diterima adalah sah UTF-8 sebelum cuba menyimpan atau menggunakannya di mana-mana sahaja. PHP mb_check_encoding() boleh melakukannya, tetapi anda mesti sentiasa menggunakannya. Memandangkan pelanggan berniat jahat boleh menyerahkan data dalam mana-mana pengekodan yang mereka mahu, tidak ada 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 bahawa setiap kali anda mengendalikan rentetan UTF-8 anda melakukannya dengan selamat. Malangnya, ini adalah bahagian yang paling 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 beberapa sumber hebat tentang semua yang anda perlu ketahui.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!