Gunakan pengekodan UTF-8 sepanjang masa
P粉557957970
P粉557957970 2023-08-27 15:50:39
0
2
483
<p> 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. </p> <p>Di manakah sebenarnya saya perlu menetapkan pengekodan/set aksara? 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? </p> <p>Ini terpakai kepada pelayan Linux baharu yang menjalankan MySQL 5, PHP, 5 dan Apache 2. </p>
P粉557957970
P粉557957970

membalas semua(2)
P粉293341969

Saya ingin menambah satu perkara kepada jawapan yang sangat baik 一个>chazomaticus:

Juga jangan lupa teg META (seperti ini, atau versi 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 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 kedua-dua pengepala HTTP dan teg meta HTML (atau pengisytiharan XML dalam kes XHTML bertindak sebagai XML).

P粉579008412

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 utf8mb4utf8mb4

    . 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 menggunakan mysqli, anda boleh menghubungi set_charset()set_charset()

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

    Jika anda berkeras untuk menggunakan mysql biasa 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

    /utf8 seperti yang dinyatakan di atas.

    🎜 🎜 🎜🎜Output🎜: 🎜
    • UTF-8 hendaklah ditetapkan dalam pengepala HTTP, seperti fungsi Content-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 atau metadata HTML).
    • Gunakan json_encode() 对输出进行编码时,添加 JSON_UNESCAPED_UNICODE sebagai 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 sambungan mbstring PHP secara meluas.

    • Secara lalai, operasi rentetan terbina dalam PHP tidak UTF-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 paling rendah yang mungkin. Semak mana-mana pautan di utf8.com untuk 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