Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan rentetan php yang kacau

Bagaimana untuk menyelesaikan rentetan php yang kacau

藏色散人
藏色散人asal
2021-11-02 09:22:285122semak imbas

Penyelesaian kepada rentetan PHP yang bercelaru: 1. Gantikan gb2312 dengan utf-8 melalui iconv 2. Tukar pengekodan melalui fungsi mb_convert_encoding.

Bagaimana untuk menyelesaikan rentetan php yang kacau

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah maksud $ini dalam phpArtikel seterusnya:Apakah maksud $ini dalam php