URLパラメータを設定するときに特殊文字をエンコードする
P粉348915572
2023-08-17 11:25:49
<p>いくつかの URL パラメータを設定する必要があります。これには特殊文字 <code>$</code></p> も含まれている必要があります。
<p>現在、<code>.set()</code> を使用して、次のパラメータの値を作成および設定しています。</p>
<pre class="brush:php;toolbar:false;">const myUrl = 新しい URL("http://www.example.com/?");
let params = 新しい URLSearchParams();
params.set('$param1', '60');
params.set('$param2', '100');</pre>
<p>URL に <code>$</ ではなく <code>$</code> を確実に取得するには、<code>encodeURI()</code> を使用する必要があることはわかっています。 code> - しかし、どの段階でこれを行うべきでしょうか? </p>
<p>パラメータを文字列に変換してURLに追加するときにこのようにすると、すでに変換されています。 </p>
<pre class="brush:php;toolbar:false;">myUrl.search = encodeURI(params.toString());
// 出力: http://www.example.com/?$param1=60&$param2=100
// 期待値: http://www.example.com/?$param1=60&$param2=100</pre>
<p><br /></p>
必要でサーバーがサポートしているので、最後に修正するだけです
あなたの場合、
$
文字は URL の予約文字であるため、$
としてエンコードされます。URLSearchParams
オブジェクトのset
メソッドは、これらの文字を自動的にエンコードして、生成された文字列が有効な URL であることを確認します。ただし、
これにより、目的の出力が得られますが、$
文字をそのまま含める場合は、クエリ文字列を手動で作成することで自動エンコードをバイパスできます。 リーリー$
やり取りしているサーバーまたは API を制御しており、クエリ文字列には予約文字であるため、URL 仕様によれば、これは有効な URL ではない可能性があることに注意してください。これにより、特定のサーバーまたは API で問題が発生する可能性があります。
$
このソリューションが機能するかどうか、またはさらにサポートが必要かどうかを確認してください。文字を含む URL を処理できると確信している場合、このメソッドは機能するはずです。それ以外の場合は、通常、
URLSearchParamsによって提供される自動エンコードを使用するのが最も安全です。