Mengekodkan aksara khas apabila menetapkan parameter URL
P粉348915572
2023-08-17 11:25:49
<p>Saya perlu menetapkan beberapa parameter URL, yang juga perlu mengandungi aksara khas <kod>$</code></p>
<p>Pada masa ini saya menggunakan <code>.set()</code>
<pre class="brush:php;toolbar:false;">const myUrl = URL baharu("http://www.example.com/?");
biarkan params = URLSearchParams baharu();
params.set('$param1', '60');
params.set('$param2', '100');</pre>
<p>Saya tahu saya perlu menggunakan <code>encodeURI()</code> untuk memastikan saya mendapat <code>$</code> kod> - Tetapi pada peringkat manakah saya harus melakukan ini? </p>
<p>Jika saya melakukan sesuatu seperti ini apabila menukar parameter kepada rentetan dan menambahkannya pada URL, ia sudah pun ditukar. </p>
<pre class="brush:php;toolbar:false;">myUrl.search = encodeURI(params.toString());
// Output: http://www.example.com/?%24param1=60&%24param2=100
// Jangkaan: http://www.example.com/?$param1=60&$param2=100</pre>
<p><br /></p>
Memandangkan anda memerlukannya dan pelayan anda menyokongnya, cuma betulkan pada akhirnya
Dalam kes anda, kaedah
$
字符被编码为%24
,因为它是URL中的保留字符。URLSearchParams
对象的set
mengekod aksara ini secara automatik untuk memastikan rentetan yang terhasil ialah URL yang sah.Walau bagaimanapun, jika anda ingin memasukkan
$
aksara sebagaimana adanya, anda boleh memintas pengekodan automatik dengan membina rentetan pertanyaan secara manual:Ini akan memberikan anda output yang diingini, tetapi sila ambil perhatian bahawa ini mungkin bukan URL yang sah mengikut spesifikasi URL, kerana
$
ialah aksara yang dikhaskan. Ini boleh menyebabkan masalah dengan pelayan atau API tertentu.Jika anda mengawal pelayan atau API yang anda sedang berinteraksi, dan anda yakin ia boleh mengendalikan URL dengan
$
字符的URL,则此方法应该有效。否则,通常最安全的做法是使用URLSearchParams
aksara dalam rentetan pertanyaan, kaedah ini sepatutnya berfungsi. Jika tidak, biasanya paling selamat menggunakan pengekodan automatik yang disediakan olehURLSearchParams
.Sila sahkan jika penyelesaian ini berfungsi untuk anda atau jika anda memerlukan bantuan lanjut.