Kata Pengantar:
Sejujurnya,
Sandal juga menganggap UTF8 adalah hal yang baik...
Lagi pula, menampilkan Tiongkok, Jepang, dan Korea Selatan dalam satu layar sangat menarik bagi orang Asia Timur...
(Tentu saja manfaatnya tidak terbatas pada ini...)
Bukan hanya program web…
Kernel dari banyak aplikasi mulai menggunakan pengkodean Unicode...
Tujuannya jelas: mendukung tampilan multi-bahasa...
Semua perangkat lunak Microsoft berbasis Unicode...
Oleh karena itu, perangkat lunak Jepang dapat ditampilkan secara normal di XP Cina Anda...
Dan Chinese 98 akan menyebabkan karakter kacau ketika menginstal perangkat lunak bahasa lain pada kernel GB...
Sedangkan untuk UTF8,
Bisa dikatakan sebagai cabang dari Unicode.
Ia menggunakan tiga byte untuk menyimpan karakter Cina...
(Unicode menggunakan empat byte)
Perangkat lunak aplikasi secara kolektif membelot ke Unicode...
Apakah kami tidak diperbolehkan menggunakan UTF8 dalam aplikasi web?
Pada artikel ini, Sandals akan mencoba memperkenalkan pemrograman PHP dengan pengkodean UTF8 dalam banyak aspek...
Adapun mengapa "Cina" diperkenalkan secara terpisah...
Pertama, karena tidak perlu mempertimbangkan UTF8 dalam bahasa Inggris…
Kecuali Anda berencana membangun sistem multi-bahasa...
(Saya ingin menyampaikan beberapa keluhan: Orang asing saat ini tidak memperhatikan masalah ini sama sekali saat menulis program...)
Kedua, metode pemrosesan bahasa multi-byte seperti Cina, Jepang, dan Korea dengan pengkodean UTF8 sebenarnya sangat mirip...
Ikuti saja labunya dan ambil sendoknya...
Oke... mari kita mulai dengan bagian pemrosesan database...
=============
Menghubungkan ke database
Banyak orang akan menemukan bahwa datanya kacau ketika mereka baru saja mengupgrade ke Mysql 4.1...
Faktanya, ini karena Mysql mendukung rangkaian karakter mulai dari 4.1...
Dan kumpulan karakter default adalah UTF8...
(Bukti lengkap pentingnya integrasi dengan standar internasional... Hehe...)
Dulu, kami kebanyakan menggunakan pengkodean utf8 atau GBK...
Tentu saja data keluarannya kacau...
Untuk mengatasi kode yang kacau...
Anda harus memberi tahu program pengkodean data apa yang akan diperoleh...
Kami berasumsi bahwa database Anda sebelumnya dikodekan utf8...
mysql_query('SET CHARACTER SET utf8') atau die("Query failed : " . mysql_error());
sebelum kueri.
Tentu saja, karena ini hanya diperlukan untuk versi 4.1 dan yang lebih baru,
Oleh karena itu kita dapat menambahkan penilaian:
$mysqlversion = $db->query_first("SELECT VERSION() AS version");
if ($mysqlversion['version'] >= '4.1')
{
mysql_query('SET KARAKTER SET utf8') or die("Kueri gagal : " .mysql_error());
}
Dengan cara ini, apa pun pengkodean default Mysql, Anda dapat mengaksesnya secara normal...
(Tidak masalah apakah Anda menyetor selama periode bertahan hidup, menyetor untuk jangka waktu tertentu, atau bahkan menarik dalam jumlah kecil...)
Namun, semua orang bersifat internasional...
Apakah Anda masih menggunakan utf8?
Bagaimana cara mentranskodekannya?
di samping itu……
Apa yang harus saya lakukan jika karakter kacau muncul selama peningkatan data?
Salad!
Mari kita simak uraiannya lain kali…
============= === =
Data perlu ditingkatkan ke 4.1
...
Anda harus mengekspornya terlebih dahulu...
Mengatakan bahwa orang asing benar-benar tidak bertanggung jawab...
Metode ekspor sebelumnya selalu kehilangan beberapa karakter Cina...
Misalnya, ubah "Aku sayang ibumu" menjadi "Aku sayang kamu"...
(Biasanya kata terakhir dari suatu data hilang)
Semuanya adalah generasi di belakang...
(Dalam kata-kata Sister Pomegranate, "Fakta tindakan pemberontakan seperti itu sungguh menarik"...)
Untuk melindungi hatimu yang rapuh...
Juga untuk menjaga etika dan moral tradisional Tiongkok...
Anda dapat mengubah bidang yang datanya berisi karakter Cina menjadi pengkodean biner...
Metode spesifik...
Anda dapat menjalankan pernyataan ini:
ALTER TABLE `nama tabel` CONVERT TO CHARACTER SET biner;
Dengan cara ini, bidang tipe karakter tersebut seperti:
CHAR, VARCHAR dan TEKS
akan dikonversi menjadi
BINARY, VARBINARY dan BLOB
Kemudian ekspor dan impor ke lingkungan 4.1...
Tentu saja, tugas terakhir yang membosankan adalah:
Anda perlu mengubah tipenya kembali...
Ada peningkatan ke 4.1...
Tentu saja, ada juga penurunan...
Bagaimana cara menurunkan versi? ? ?
Sandal untuk ke toilet...
Dan silahkan buka halaman berikutnya...
=========== ==== ===
Data diturunkan versinya dari 4.1.
Beberapa orang menemukan bahwa file SQL yang diekspor dari 4.1 tidak dapat diimpor ke program versi yang lebih rendah...
Masalahnya sebenarnya sangat sederhana...
Dan Mysql telah memikirkan segalanya untuk kita...
Silakan tambahkan parameter --kompatibel saat mengekspor...
Kami berasumsi database Anda dikodekan utf8...
Dan versi database target adalah 4.0…
Kemudian tulis ini di baris perintah:
shell>mysqldump --user=username --password=password --kompatibel=mysql40 --default-character-set=utf8 database > db.sql
File SQL yang diekspor dengan cara ini dapat berhasil diimpor ke database versi yang lebih rendah...
Bagian database akhirnya selesai...
Namun bagaimana sebaiknya kita memperhatikan pemrograman PHP?
Saya harus meminta Anda untuk membuka halaman berikutnya...
http://www.knowsky.com
===============
Pengkodean file PHP
Apakah semua file PHP harus dikonversi ke pengkodean UTF8?
Sandal memberi tahu Anda TIDAK...
begini saja...
Jika file berisi karakter Cina yang perlu ditampilkan...
Itu harus dikonversi ke pengkodean UTF8...
Mari kita beri contoh:
// Saya adalah seorang sandal
waktu gema();
Meskipun kode di atas memiliki kode...
Tapi karena itu ada di anotasi...
Tidak ada keluaran...
Jadi halaman ini tidak perlu diubah ke format UTF8...
Contoh lain:
echo "Saya Sandal";
Ini jelas memiliki keluaran karakter Cina...
Anda sebaiknya mengonversi saja ke UTF8...
Tentu saja, banyak program sekarang menggunakan teknologi templat (paket bahasa)...
Anda tidak dapat melihat karakter apa pun untuk keluaran dalam program (file paket non-bahasa)...
Dengan cara ini, kita hanya perlu mengkonversi file paket bahasa menjadi pengkodean UTF8...
(Inilah kelebihan paket bahasa... Ahahahaha...)
'http://www.knowsky.com
====================
Intersepsi Cina UTF8
karena UTF8 menggunakan tiga byte...
Jadi fungsi substr tradisional tidak berguna...
Banyak ahli telah menulis fungsi intersepsi karakter Cina UTF8...
Berikut beberapa diantaranya:
1. Hitung dulu lalu ambil
/**
* Penulis: Dummy |
*Email: [email protected] |
*Buat: 200512
* Penggunaan: echo join('', String::subString_UTF8('Karakter Cina', 0, 1));
*/
ini_set('tampilan_kesalahan', 1);
error_reporting(E_ALL^E_NOTICE);
kelas String {
fungsi subString_UTF8($str, $mulai, $lenth)
{
$len = strlen($str);
$r = susunan();
$n = 0;
$m = 0;
untuk($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = konversi_dasar(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
jika ($n < $mulai){
jika (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}kalau tidak{
jika (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}kalau tidak{
$r[] = '';
}
jika (++$m >= $kepanjangan){
merusak;
}
}
}
kembalikan $r;
} // Akhiri subString_UTF8
}//Akhir String
echo join('', String::subString_UTF8('Karakter Cina', 0, 1));
2. Menurutku, sangat pintar jika sandalnya dipotong terlebih dahulu, lalu dipotong...
Gunakan fungsi intersepsi tradisional untuk memotong terlebih dahulu...
Kemudian tentukan apakah satu karakter Cina terpecah...
Jika ya... maka hadapilah...
Penting untuk dicatat bahwa parameter ketiga dari fungsi substr harus lebih besar dari 3...
Lalu kenapa tidak menggunakan sandal, bisa dijelaskan?
// Fungsi trim untuk menghapus karakter terakhir dari string utf-8
// dengan mengikuti instruksi di http://en.wikipedia.org/wiki/UTF-8
// dotann
// penggunaan: $str = utf8_trim(substr($str,0,50));
fungsi utf8_trim($str) {
$len = strlen($str);
untuk ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) kembali(substr($str,0,$i));
if (($ch & 192)==192) kembali(substr($str,0,$i));
}
return($str.$hex);
}
$str = 'Karakter Cina';
echo utf8_trim(substr($str,0,3));
3. Ada metode lain,
Misalnya, 007pig adalah fungsi yang ditulis dalam vBulletin kami versi Cina...
Pendek dan manis...
Tidak nyaman untuk merilis kode sumber...
Maaf Bird...
Aku akhiri tulisanku disini hari ini...
Ada juga masalah seperti transcoding yang belum ditulis...
Akhir-akhir ini sibuk...
Lanjutkan mengatur ketika Anda punya waktu...
http://www.quchao.com/?p=6&pp=1