Merangkul UTF-8 dari awal hingga akhir
P粉925239921
P粉925239921 2023-10-15 12:36:31
0
2
644

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.

P粉925239921
P粉925239921

membalas semua (2)
P粉482108310

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).

    P粉457445858

    Storan Data:

    • Nyatakanutf8mb4字符集。这使得 MySQL 物理存储和检索以 UTF-8 原生编码的值。请注意,如果指定了utf8mb4_*排序规则(没有任何显式字符集),MySQL 将隐式使用utf8mb4pengekodan 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 kepadautf8mb4utf8mb4

      . Dengan cara ini, apabila MySQL menghantar data ke aplikasi anda, ia tidak menukar daripada UTF-8 asalnya atau 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:
      $dbh = new PDO('mysql:charset=utf8mb4');
    • Jika anda menggunakanmysqli, anda boleh menghubungiset_charset()set_charset()

    • :
    • $mysqli->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($link, 'utf8mb4'); // procedural style

      Jika anda berkeras untuk menggunakanmysqlbiasa tetapi kebetulan menjalankan PHP ≥ 5.2.3, anda boleh menghubungi 代码>mysql_set_charset

    • .
  • 设置名称'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:

    Tetapkan nama 'utf8mb4'
  • .

    utf8mb4/utf8

  • Pertimbangan yang sama dikenakan untuk utf8mb4

    /utf8seperti yang dinyatakan di atas.

    Output:
    • UTF-8 hendaklah ditetapkan dalam pengepala HTTP, seperti fungsiContent-Type:text/html;字符集=utf-8。您可以通过设置default_charset code>在 php.ini 中(首选),或手动使用header().
    • Jika aplikasi anda memindahkan teks ke sistem lain, mereka juga perlu mengetahui pengekodan aksara. Untuk aplikasi web, penyemak imbas mesti diberitahu pengekodan untuk menghantar data (melalui pengepala respons HTTP ataumetadata HTML).
    • Gunakanjson_encode()对输出进行编码时,添加JSON_UNESCAPED_UNICODEsebagai hujah kedua.

    Masuk:

    • Pelayar akan menyerahkan data untuk set aksara yang ditentukan oleh dokumen, jadi tidak perlu melakukan sebarang operasi khas pada input.
    • Jika anda mempunyai keraguan tentang pengekodan permintaan (sekiranya ia mungkin telah diganggu), anda boleh mengesahkan bahawa setiap rentetan yang diterima adalah UTF-8 yang sah sebelum cuba menyimpan atau menggunakannya di mana-mana sahaja.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 sambunganmbstringPHP 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 fungsimbstringyang 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>

      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!