Rumah  >  Soal Jawab  >  teks badan

Sentiasa gunakan UTF-8

<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粉964682904P粉964682904442 hari yang lalu582

membalas semua(2)saya akan balas

  • P粉854119263

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

    balas
    0
  • P粉763662390

    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/

      terpakai seperti di atas.

    Output

    : 🎜
    • UTF-8 hendaklah ditetapkan dalam pengepala HTTP, seperti fungsi Content-Type: text/html; charset=utf-8. You can achieve that either by setting default_charset in php.ini (preferred), or manually using 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). < /里>
    • Apabila mengekodkan output menggunakan json_encode(), add JSON_UNESCAPED_UNICODE sebagai parameter kedua.

    Masuk :

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

    • balas
      0
  • Batalbalas