Apa Saja yang Harus disetting di Server untuk Support Full UTF-8

Apa Saja yang Harus disetting di Server untuk Support Full UTF-8

iis

September 4, 2019

Saya sedang menyiapkan server baru dan ingin mendukung UTF-8 sepenuhnya dalam aplikasi web saya. Saya telah mencoba ini di masa lalu pada server yang ada dan tampaknya selalu harus kembali ke ISO-8859-1.

Di mana tepatnya saya perlu mengatur pengkodean / rangkaian karakter? Saya sadar bahwa saya perlu mengkonfigurasi Apache, MySQL, dan PHP untuk melakukan ini – apakah ada beberapa daftar periksa standar yang dapat saya ikuti, atau mungkin memecahkan masalah di mana ketidakcocokan terjadi?

Ini untuk server Linux baru, yang menjalankan MySQL 5, PHP, 5 dan Apache 2.

Utf8webgrowth

Penyimpanan data:

Tentukan karakter utf8mb4 yang ditetapkan pada semua tabel dan kolom teks dalam database Anda. Ini membuat MySQL secara fisik menyimpan dan mengambil nilai yang disandikan secara asli di UTF-8. Perhatikan bahwa MySQL secara implisit akan menggunakan pengkodean utf8mb4 jika collation utf8mb4_ * ditentukan (tanpa set karakter eksplisit).

Dalam versi MySQL yang lebih lama (<5.5.3), Anda sayangnya terpaksa menggunakan hanya utf8, yang hanya mendukung subset karakter Unicode. Saya berharap saya bercanda. Akses data:     Dalam kode aplikasi Anda (mis. PHP), dalam metode akses DB apa pun yang Anda gunakan, Anda harus mengatur charset koneksi ke utf8mb4. Dengan cara ini, MySQL tidak melakukan konversi dari UTF-8 asalnya ketika menyerahkan data ke aplikasi Anda dan sebaliknya.     Beberapa driver menyediakan mekanisme mereka sendiri untuk mengonfigurasi set karakter koneksi, yang keduanya memperbarui keadaan internal sendiri dan menginformasikan MySQL tentang pengkodean yang akan digunakan pada koneksi – ini biasanya merupakan pendekatan yang lebih disukai. Dalam PHP:

Jika Anda menggunakan layer abstraksi PDO dengan PHP ≥ 5.3.6, Anda dapat menentukan charset di DSN:
$dbh = new PDO('mysql:charset=utf8mb4');

Jika Anda menggunakan mysqli, Anda dapat memanggil set_charset ():

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

Jika Anda terjebak dengan mysql biasa tetapi kebetulan menjalankan PHP ≥ 5.2.3, Anda dapat memanggil mysql_set_charset.

Jika driver tidak menyediakan mekanisme sendiri untuk mengatur set karakter koneksi, Anda mungkin harus mengeluarkan query untuk memberi tahu MySQL bagaimana aplikasi Anda mengharapkan data pada koneksi yang akan di-encode: SET NAMES ‘utf8mb4’.

Pertimbangan yang sama tentang utf8mb4 / utf8 berlaku seperti di atas.

Keluaran:

Jika aplikasi Anda mentransmisikan teks ke sistem lain, mereka juga perlu diberi tahu tentang pengkodean karakter. Dengan aplikasi web, browser harus diberi tahu tentang penyandian data yang dikirim (melalui header respons HTTP atau metadata HTML).

Di PHP, Anda dapat menggunakan opsi default_charset php.ini, atau menerbitkan sendiri header MIME Content-Type secara manual, yang hanya lebih berfungsi tetapi memiliki efek yang sama.

Saat menyandikan output menggunakan json_encode (), tambahkan JSON_UNESCAPED_UNICODE sebagai parameter kedua.

Memasukkan:

Sayangnya, Anda harus memverifikasi setiap string yang diterima sebagai UTF-8 yang valid sebelum Anda mencoba menyimpannya atau menggunakannya di mana saja. Mb_check_encoding PHP () melakukan trik, tetapi Anda harus menggunakannya secara religius. Benar-benar tidak ada jalan keluar, karena klien jahat dapat mengirimkan data dalam penyandian apa pun yang mereka inginkan, dan saya belum menemukan trik untuk membuat PHP melakukan ini untuk Anda secara andal.

Dari bacaan saya tentang spesifikasi HTML saat ini, sub-peluru berikut tidak diperlukan atau bahkan berlaku lagi untuk HTML modern. Pemahaman saya adalah bahwa browser akan bekerja dengan dan mengirimkan data dalam set karakter yang ditentukan untuk dokumen. Namun, jika Anda menargetkan versi HTML yang lebih lama (XHTML, HTML4, dll.), Poin-poin ini mungkin masih berguna:
Untuk HTML sebelum HTML5 saja: Anda ingin semua data yang dikirimkan kepada Anda oleh browser berada di UTF-8. Sayangnya, jika Anda menggunakan satu-satunya cara untuk melakukan hal ini adalah menambahkan atribut accept-charset ke semua tags

Hanya untuk HTML sebelum HTML5: perhatikan bahwa spesifikasi HTML W3C mengatakan bahwa klien “harus” default untuk mengirim formulir kembali ke server dalam charset apa pun yang dilayani server, tetapi ini tampaknya hanya rekomendasi, karenanya kebutuhan untuk menjadi eksplisit pada setiap satu tag

Pertimbangan Kode Lainnya:

Cukup jelas, semua file yang akan Anda layani (PHP, HTML, JavaScript, dll.) Harus dikodekan dalam UTF-8 yang valid.

Anda perlu memastikan bahwa setiap kali Anda memproses string UTF-8, Anda melakukannya dengan aman. Sayangnya, ini adalah bagian yang sulit. Anda mungkin ingin memanfaatkan ekstensi mbstring PHP secara ekstensif.

Operasi string bawaan PHP tidak secara default aman UTF-8. Ada beberapa hal yang dapat Anda lakukan dengan aman dengan operasi string PHP normal (seperti penggabungan), tetapi untuk sebagian besar hal Anda harus menggunakan fungsi mbstring yang setara.

Untuk mengetahui apa yang Anda lakukan (baca: bukan mengacaukannya), Anda benar-benar perlu tahu UTF-8 dan cara kerjanya pada level serendah mungkin. Lihatlah salah satu tautan dari utf8.com untuk sumber yang bagus untuk mempelajari semua yang perlu Anda ketahui.