Bincangkan sebab dan penyelesaian untuk parameter URL bercelaru yang diperolehi oleh PHP

PHPz
Lepaskan: 2023-04-11 15:15:19
asal
957 orang telah melayarinya

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.

Apakah parameter URL bercelaru?

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
Salin selepas log masuk

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.

Penyelesaian kepada parameter URL bercelaru dalam PHP

Untuk menyelesaikan masalah parameter URL bercelaru dalam PHP, anda perlu mengikuti beberapa amalan terbaik. Berikut ialah beberapa cara untuk membetulkan parameter URL yang bercelaru.

1. Nyatakan pengekodan aksara secara eksplisit

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");
Salin selepas log masuk

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" );
Salin selepas log masuk

2. Gunakan fungsi urlencode() untuk mengekod parameter URL

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
Salin selepas log masuk

3 Gunakan $_REQUEST dan bukannya $_GET atau $_POST

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

4. Tetapkan pengekodan aksara dalam fail .htaccess

Jika anda menggunakan pelayan Apache, anda boleh menetapkan pengekodan aksara dalam fail .htaccess.

AddDefaultCharset UTF-8
Salin selepas log masuk
Ini akan memastikan bahawa Apache menetapkan pengekodan aksara lalai kepada UTF-8, sekali gus mengelakkan isu pengekodan aksara.

Kesimpulan

Parameter URL bercelaru adalah masalah biasa dalam pembangunan aplikasi web. Masalah ini boleh dielakkan dengan berkesan jika anda menetapkan pengekodan aksara dengan betul, gunakan fungsi

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan