web-dev-qa-db-ja.com

GETでフォーム値をURLエンコードすることからブラウザを停止するにはどうすればよいですか?

method="get"のフォームがあります。フォームでCSSファイルのURLを渡す必要がありますが、それはhttp%3A%2F%2Fwww...などにエンコードされています。

ファイルを壊しているときにURLのエンコードを停止する方法はありますか?.

ありがとう

13
kristina

バックグラウンド

一目で想像するよりも少し微妙です。 URI標準の特定の形式であるURLの場合、特定の文字は特殊です。特殊文字には、:(スキーム区切り文字)と/(パスまたは階層区切り文字)があります。 RFC-2396 からの予約済みシンボルの完全なリストは次のとおりです。

予約済み= ";" | "/" | 「?」 | ":" | 「@」| "&" | "=" | "+" | 
 "$" | "、"

これはセキュリティとはほとんど関係がなく、単に標準に従うことと関係があります。これらの記号は、URI、URL、またはURNで特別なことを意味します。それらをパスまたはクエリ文字列の一部として使用する必要がある場合(GETリクエストによってクエリ文字列が作成されます)、それらをエスケープする必要があります。エスケープの短いバージョンは次のとおりです。UTF-8バイトを16進数として取得し、その前に%記号を付けます。予約文字の場合、UTF-8では常に1バイト文字であるため、2桁の16進数としてエスケープされます。

ソリューションへの道

問題に戻ります。使用している言語については言及していません。ただし、インターネットで機能する言語には、URLをエンコードまたはデコードする方法があります。 URL全体をデコードするヘルパー関数を備えているものもありますが、通常は、URLを名前と値のペアに分割してからデコードすることをお勧めします。これにより、必要な絶対URLパスが得られます。

注:クエリ値を常にデコードすることをお勧めします。これは、ユーザーが値を入力すると、その値が予約されているかどうかがわからず、ブラウザーがその値をエンコードするためです。君は。そうしないと、セキュリティ上のリスクが発生します。

編集:サーバー側ではなく、ページ内でデコードする必要がある場合は、その仕事をするためにJavaScriptが必要になるでしょう。 URLのエンコード/デコードについては このページ をご覧になるか、Googleを使用して他の多くのURLを検索してください。

13
Abel

いいえ、できません。有効なURLを作成するには、エンコーディングが必要です。

代わりに、受信コードの値をデコードします(とにかく、どのプラットフォームを使用していますか。通常、URLデコードは自動的に行われます)。

6
Matti Virkkunen

いいえ、セキュリティ上の理由から、これを行うことはできません。受信側で収集してデコードする必要があります。

2
Salil

FORMメソッドとGETメソッド、およびいくつかの特別な文字を使用すると、結果のクエリをブラウザでエンコードすることになります。ページを更新せずにURLアドレスを変更することをサポートする新しいブラウザ(IE10 +)の場合、URLクエリ文字列をデコードしてアドレスを更新することができます。

私は次のようなスクリプトを使用しています:

    <script type="text/javascript">
    if (history.pushState) { //IE10+
        var newurl = window.location.protocol + "//" + window.location.Host + window.location.pathname + decodeURIComponent(window.location.search);
        window.history.pushState({path:newurl},'',newurl);
    }
    </script>

これにより、 http://example.com/page.html?path=foo%2Fbarhttp://example.com/page.html?path=foo/バー

1
crisc82

XMLHttpRequestを使用した場合は、エンコードせずにテキストを送信できます。 JavaScriptを使用してこれを行うことができますが、content-typetext/plainに設定することを忘れないでください。

content-type: text/plain
0
Yasser Gersy

Javascript関数を使用してURLをデコードできます。decodeURIComponent(Url);ブラウザは特殊文字のURLをエンコードするためです。例: https://www.example.com%20https%3A%2F%2Fwww.example.comにエンコードされます。ここで、特殊文字は%とそのASCI値に置き換えられます。

0
Harshal Khatri