web-dev-qa-db-ja.com

URLエンコードの引用符とスペース

JavaScriptでエンコードされたクエリテキストがいくつかありますが、サーバーサイドで同じテキストをエンコードする必要があり、発生しているエンコードが同じではないユースケースに遭遇しました。同じである必要があります。以下に例を示します。

検索ボックスに_"I like food"_と入力し、searchボタンを押します。 JavaScriptはこれを_%22I%20like%20food%22_としてエンコードします

サーバー側のリクエストオブジェクトの文字列と同じ値を取得するとしましょう。次のようになります:_"\"I like food\""_

HttpUtility.UrlEncode(value)を使用すると、結果は_"%22I+like+food%22"_になります。 HttpUtility.UrlPathEncode(value)を使用すると、結果は_"\"I%20like%20food\""_になります

したがって、UrlEncodeは引用符をエンコードしていますが、スペースに_+_文字を使用しています。 UrlPathEncodeはスペースをエンコードしていますが、エスケープされた引用符はエンコードしていません。

両方を行うには本当に必要です。そうしないと、検索コードが完全に私を悩ませます(そして、検索コードを制御することはできません)。

チップ?

28
Samo

UrlPathEncodeはエスケープしません"は、パスコンポーネントでエスケープする必要がないためです。

Uri.EscapeDataString はあなたが望むことをすべきです。

54
porges

いくつかのオプションがありますが、最も速いのはUrlEncodeを使用してからstring.replaceを実行して+文字と%20

何かのようなもの

HttpUtility.UrlEncode(input).Replace("+", "%20");
9
Mitchel Sellers