Jika anda menulis aplikasi web menggunakan PHP, anda mungkin mengalami masalah parameter URL yang bercelaru. Sebab anda mendapat parameter URL yang kacau ialah apabila anda cuba mendapatkan parameter daripada URL dan menggunakannya, PHP mungkin tidak menghuraikan parameter dengan betul. Ini boleh menyebabkan beberapa tingkah laku yang tidak dijangka, dan jika tidak diperbaiki, ia boleh menyebabkan masalah yang lebih serius. Dalam artikel ini, kita akan bercakap tentang sebab PHP mendapat parameter URL yang kacau dan cara membetulkannya.
Parameter URL bercelaru bermakna apabila anda cuba membaca parameter daripada URL, PHP mungkin menghadapi beberapa masalah pengekodan aksara, menyebabkan keputusan akhir tidak dijangka. Ini biasanya disebabkan oleh tetapan pengekodan aksara yang salah apabila PHP menghuraikan parameter URL.
Sebagai contoh, katakan anda mempunyai URL berikut:
http://example.com/?q=%E4%B8%AD%E6%96%87
Dalam URL ini, parameter q
ialah %E4%B8%AD%E6%96%87
. Ini ialah pengekodan perkataan "Bahasa Cina" selepas pengekodan URL, dan digunakan untuk menghantar aksara Cina dalam URL. Jika anda menghuraikan hujah ini dengan betul, anda sepatutnya mendapat 中文
. Walau bagaimanapun, jika anda tidak mengendalikan parameter ini dengan betul, anda mungkin mendapat hasil lain, seperti %E4%B8%AD%E6%96%87
atau tiada langsung.
Ini biasanya berlaku apabila PHP tidak menetapkan pengekodan aksara dengan betul, mengakibatkan parameter URL bercelaru.
Untuk menyelesaikan masalah parameter URL bercelaru dalam PHP, anda perlu mengikuti beberapa amalan terbaik. Berikut ialah beberapa cara untuk membetulkan parameter URL yang bercelaru.
Dalam PHP, gunakan fungsi urldecode()
untuk menyahkod rentetan yang dikodkan URL ke dalam aksara yang diwakilinya.
Apabila mengendalikan parameter URL, pengekodan aksara mesti dinyatakan dengan jelas. Jika tiada pengekodan aksara dinyatakan, PHP menetapkannya kepada ISO-8859-1 secara lalai. Ini boleh menyebabkan masalah pengekodan aksara.
Oleh itu, untuk memastikan penghuraian parameter URL yang betul, anda harus menentukan pengekodan aksara secara eksplisit. Anda boleh menetapkan mb_internal_encoding()
kepada pengekodan aksara yang anda perlukan, seperti UTF-8.
mb_internal_encoding("UTF-8");
Sebagai alternatif, anda boleh menghantar jenis pengekodan melalui parameter URL dan menggunakan fungsi mb_convert_encoding()
untuk menyahkodnya.
$encoded = $_GET["q"]; $decoded=mb_convert_encoding ( $encoded, "UTF-8", "auto" );
Untuk mengelakkan parameter URL daripada dikacau, anda harus sentiasa menggunakan fungsi urlencode()
untuk mengekod parameter URL. Ini memastikan bahawa ia dikodkan dengan betul dan dihantar dengan betul dalam URL. Apabila menerima parameter, gunakan fungsi urldecode()
untuk menyahkodnya.
$params = array( "q" => "中文", "page" => 1 ); $encoded_params = http_build_query($params); $url = "http://example.com/?" . $encoded_params; echo $url; // 输出:http://example.com/?q=%E4%B8%AD%E6%96%87&page=1
Jika anda perlu membaca parameter URL daripada $_GET
atau $_POST
, anda harus menggunakan . $_REQUEST
Tatasusunan yang mengandungi data GET, POST dan COOKIE yang diserahkan dalam permintaan. Dengan cara ini anda tidak akan terlepas sebarang parameter dan mengelak daripada menggunakan tatasusunan yang salah menyebabkan isu pengekodan aksara. $_REQUEST
AddDefaultCharset UTF-8
untuk mengekod parameter URL dan gunakan tatasusunan urlencode()
untuk mendapatkan parameter daripada permintaan. Jika anda memberi perhatian kepada amalan terbaik ini, anda boleh mengelakkan banyak masalah pengekodan aksara dan memastikan kebolehpercayaan program anda. $_REQUEST
Atas ialah kandungan terperinci Bincangkan sebab dan penyelesaian untuk parameter URL bercelaru yang diperolehi oleh PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!