Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Sebab dan penyelesaian untuk parameter url php Cina yang kacau-bilau [Ringkasan]

Sebab dan penyelesaian untuk parameter url php Cina yang kacau-bilau [Ringkasan]

PHPz
PHPzasal
2023-03-21 11:10:312384semak imbas

PHP ialah bahasa pembangunan yang digunakan secara meluas yang boleh digunakan untuk mencipta aplikasi web dan halaman web dinamik. Walau bagaimanapun, anda akan menghadapi pelbagai masalah apabila menggunakan PHP Salah satu masalah yang paling sukar ialah masalah parameter Cina yang kacau dalam URL. Dalam artikel ini, kami akan meneroka punca masalah ini dan cara menyelesaikannya.

Sebab masalah parameter Cina bercelaru dalam URL

Dalam protokol HTTP, URL terdiri daripada berbilang bahagian, termasuk protokol, nama hos, laluan fail dan rentetan aksara pertanyaan dsb. Apabila URL termasuk aksara Cina, aksara ini perlu dikodkan untuk memastikan pelayan dan penyemak imbas boleh mentafsirnya dengan betul. Penukaran pengekodan ini menggunakan kaedah yang dipanggil pengekodan URL. Pengekodan URL menukar semua aksara bukan abjad angka ke dalam format tanda peratus (%) diikuti dengan dua digit heksadesimal.

Sebagai contoh, aksara Cina "安" diwakili oleh pengekodan UTF-8 sebagai "E5 AE 89". Setelah URL dikodkan, ia menjadi "%E5%AE%89". Penyemak imbas menghantar pengekodan ini kepada pelayan untuk memberitahu pelayan untuk menghantar "%E5%AE%89" dalam rentetan pertanyaan dan bukannya aksara Cina asal "安".

Walau bagaimanapun, apabila kod PHP cuba menghantar parameter Cina dalam URL, ia mungkin tidak menghuraikannya dengan betul, mengakibatkan aksara bercelaru. Ini kerana PHP menggunakan set aksara ISO-8859-1 secara lalai untuk menghuraikan parameter dalam permintaan GET. Aksara Cina dalam format pengekodan UTF-8 tidak wujud dalam set aksara ISO-8859-1, jadi PHP akan menghuraikannya kepada aksara yang bercelaru.

Kaedah untuk menyelesaikan masalah parameter Cina bercelaru dalam URL

Untuk menyelesaikan masalah parameter Cina bercelaru dalam URL, kita mesti mengetahui kaedah pengekodan parameter dan menukarnya kepada yang boleh dikenali oleh format pengekodan PHP. Berikut ialah dua kaedah:

Kaedah 1: Penukaran Manual

Menukar pengekodan sendiri secara manual ialah salah satu cara paling mudah untuk menyelesaikan masalah ini. Kita boleh menggunakan fungsi terbina dalam PHP untuk penukaran pengekodan. Contohnya, untuk aksara Cina "安" yang dinyatakan di atas, kita boleh menggunakan kod berikut untuk menukarnya daripada format pengekodan UTF-8 kepada format pengekodan ISO-8859-1:

$url_param = '%E5%AE%89';
$decoded_param = urldecode($url_param);
$encoded_param = mb_convert_encoding($decoded_param, 'ISO-8859-1', 'UTF-8');
echo $encoded_param; // 输出:安

Dalam kod ini, kami mula-mula menggunakan fungsi urldecode() untuk menukar parameter yang dikodkan URL kembali kepada teks biasa. Kami kemudian menggunakan fungsi mb_convert_encoding() untuk menukar teks daripada pengekodan UTF-8 kepada pengekodan ISO-8859-1 dan menyimpan hasilnya dalam pembolehubah $encoded_param.

Kaedah 2: Ubah suai konfigurasi pelayan

Jika anda tidak mahu melakukan penukaran pengekodan secara manual, kami juga boleh mengubah suai konfigurasi pelayan untuk menukar parameter URL secara automatik daripada UTF- 8 format pengekodan Ia adalah format pengekodan ISO-8859-1. Dalam pelayan Apache, kita boleh mencapai ini dalam direktori akar web dengan mengubah suai fail .htaccess. Tambahkan baris berikut pada fail .htaccess anda:

AddDefaultCharset ISO-8859-1
php_value default_charset "iso-8859-1"

Ini akan memberitahu Apache untuk menggunakan pengekodan ISO-8859-1 apabila menghuraikan permintaan dan menghantar pengekodan ini kepada PHP supaya PHP boleh menghuraikannya dengan betul dalam bahasa Cina parameter dalam permintaan GET.

Kesimpulan

Dalam artikel ini, kami meneroka punca masalah parameter Cina bercelaru dalam URL dan memperkenalkan dua penyelesaian. Menukar format pengekodan parameter URL secara manual kadangkala mungkin terasa membosankan, tetapi ia merupakan penyelesaian yang paling mudah dan boleh dipercayai. Sebaliknya, dengan mengubah suai konfigurasi pelayan, kami boleh menukar parameter URL secara automatik daripada format pengekodan UTF-8 kepada format pengekodan ISO-8859-1, tetapi ini memerlukan konfigurasi dan kebenaran pelayan yang sepadan. Tidak kira kaedah yang digunakan, selagi kami memahami sepenuhnya pengetahuan pengekodan URL dan pengekodan PHP, kami boleh menyelesaikan masalah parameter Cina yang bercelaru dalam URL dan memastikan aplikasi web kami berjalan seperti biasa.

Atas ialah kandungan terperinci Sebab dan penyelesaian untuk parameter url php Cina yang kacau-bilau [Ringkasan]. 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