Penyelesaian kepada rentetan PHP yang bercelaru: 1. Gantikan gb2312 dengan utf-8 melalui iconv 2. Tukar pengekodan melalui fungsi mb_convert_encoding.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Cara menyelesaikan masalah yang kacau. rentetan php? Masalah dengan penukaran pengekodan aksara fungsi PHP iconv()
Pustaka fungsi iconv dalam PHP boleh melengkapkan penukaran antara pelbagai set aksara dan merupakan perpustakaan fungsi asas yang sangat diperlukan dalam pengaturcaraan PHP tetapi kadangkala iconv Untuk sesetengah data , akan ada kurang transcoding tanpa sebab. Sebagai contoh, ralat akan berlaku apabila menukar aksara "—" kepada gb2312.
Mari kita lihat penggunaan fungsi ini.
Aplikasi paling mudah, gantikan gb2312 dengan utf-8:
$text=iconv("GB2312","UTF-8",$text);
Dalam proses menggunakan $text=iconv("UTF-8","GB2312",$text) , jika beberapa aksara khas ditemui, seperti: "—", "." dalam nama Inggeris, dsb., penukaran akan terganggu. Teks selepas aksara ini tidak boleh ditukar lagi.
Untuk menyelesaikan masalah ini, anda boleh menggunakan kod berikut untuk mencapainya:
$text=iconv("UTF-8","GBK",$text);
Anda membacanya dengan betul, semudah itu, jangan gunakan gb2312 dan tulis sebagai GBK, itu sahaja.
Terdapat kaedah lain, parameter kedua, tambah //ABAIKAN, abaikan ralat, seperti berikut:
iconv("UTF-8","GB2312//IGNORE",$data);
Tiada perbandingan khusus antara kedua-dua kaedah ini, saya rasa yang pertama satu kaedah (GBK Daripada gb2312) adalah lebih baik.
Arahan untuk iconv() dalam manual PHP:
iconv (PHP 4 >= 4.0.5, PHP 5) iconv – Convert string to requested character encoding Description string iconv ( string in_charset, string out_charset, string str ) Performs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure. If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.
Apabila menggunakan fungsi ini untuk menukar pengekodan rentetan, anda perlu memberi perhatian Jika anda menukar utf-8 kepada gb2312, an ralat mungkin berlaku. Pada masa ini, anda boleh menggunakan kaedah berikut untuk menyelesaikan masalah:
$str=iconv('utf-8',"gb2312//TRANSLIT",file_get_contents($filepath));
Iaitu, tambah bahagian merah dalam parameter kedua, yang bermaksud: jika tiada aksara yang sepadan dengan pengekodan sumber ditemui dalam pengekodan sasaran, aksara yang serupa akan dipilih. Anda juga boleh menggunakan parameter //IGNORE di sini untuk mengabaikan aksara yang tidak boleh ditukar.
abaikan bermaksud mengabaikan ralat semasa penukaran Tanpa parameter abaikan, semua rentetan yang mengikuti aksara ini tidak boleh disimpan.
iconv bukan fungsi lalai PHP dan juga merupakan modul yang dipasang secara lalai. Ia perlu dipasang sebelum boleh digunakan.
Jika ia adalah Windows 2000 PHP, anda boleh mengubah suai fail php.ini dan mengalih keluar ";" sebelum sambungan=php_iconv.dll Pada masa yang sama, anda perlu menyalin iconv.dll dalam asal anda Fail pemasangan PHP ke Under winnt/system32 anda (jika dll anda menghala ke direktori ini). Dalam persekitaran Linux, menggunakan pemasangan statik, cuma tambah item tambahan --dengan-iconv apabila mengkonfigurasi Item iconv boleh dilihat dalam phpinfo. (Linux7.3 Apache4.06 php4.3.2).
Pengenalan kepada fungsi mb_convert_encoding dan iconv
Fungsi mb_convert_encoding digunakan untuk menukar pengekodan. Dulu saya tak faham konsep program coding, tapi sekarang macam dah faham sikit-sikit. Walau bagaimanapun, bahasa Inggeris secara amnya tidak mempunyai masalah pengekodan, hanya data Cina akan mengalami masalah ini. Sebagai contoh, apabila anda menggunakan Zend Studio atau Editplus untuk menulis program, anda menggunakan pengekodan gbk Jika data perlu dimasukkan ke dalam pangkalan data, dan pengekodan pangkalan data ialah utf8, maka data mesti dikodkan dan ditukar, jika tidak, ia akan. menjadi kacau bila memasuki pangkalan data.
Buat GBK Ke UTF-8:
<?php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK"); ?>
Jom buat GB2312 To Big5:
<?php header("content-Type: text/html; charset=big5"); echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); ?>
Tetapi untuk menggunakan fungsi di atas, anda perlu memasang tetapi anda perlu mendayakannya pustaka sambungan mbstring dahulu.
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] ) perlu mendayakan pustaka sambungan mbstring terlebih dahulu dalam php.ini, tambahkan; pengekodan input berbilang , ia akan mengenal pasti secara automatik berdasarkan kandungan, tetapi kecekapan pelaksanaan adalah lebih teruk daripada iconv
string iconv (string in_charset, string out_charset, string str) Nota: Parameter kedua, sebagai tambahan; untuk menentukan pengekodan untuk ditukar kepada Selain itu, anda juga boleh menambah dua akhiran: //TRANSLIT dan //IGNORE akan secara automatik menukar aksara yang tidak boleh ditukar terus kepada satu atau lebih aksara anggaran aksara yang tidak boleh ditukar Kesan lalai adalah untuk memotong daripada aksara haram pertama.
Umumnya gunakan iconv Hanya gunakan fungsi mb_convert_encoding apabila anda tidak dapat menentukan apakah pengekodan asal atau apabila penukaran iconv tidak dapat dipaparkan seperti biasa.
$content = iconv("GBK", "UTF-8″, $content); $content = mb_convert_encoding($content, "UTF-8″, "
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan rentetan php yang kacau. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!