8

ある入力に基づいてURLを動的に作成し、別のときにクライアントが使用するWebアプリケーションを作成しています。説明のために、これらのURLには、スラッシュ(つまり、「/」)などの特定の文字を含めることができます。これは、実際のURLの一部としてではなく、引数として解釈する必要があります。例えば:

http://mycompany.com/PartOfUrl1/PartOfUrl2/ArgumentTo/Url/GoesHere

ご覧のとおり、ArgumentTo / URL / GoesHereには確かにスラッシュがありますが、これらは無視するかエスケープする必要があります。

これは悪い例かもしれませんが、手元にある質問はより一般的で、他の特殊文字にも当てはまります。

したがって、単なる引数であり、実際のWeb要求を解決するために使用されるべきではないURLの断片がある場合、これを処理するための良い方法は何ですか?

アップデート:

いくつかの答えを考えると、明確にするのに役立つと思われるいくつかの部分を指摘できなかったことに気づきました。

クライアントがリクエストを行うことができれば素晴らしいので、私はこれをかなり言語に依存しないようにしたいと思います。たとえば、クライアントがArgumentTo / Url / GoesHereを渡したいことを知っている場合、サーバーが向きを変えてデコードして使用できる一意の文字列にエンコードできると便利です。

.NETFrameworkのHttpUtility.HtmlEncode/HtmlDecodeのような同様の関数が他のシステム/プラットフォームで利用可能であると想定できますか?URLは決してきれいである必要はないので、パスに実際の単語を含めることは実際には重要ではありません。

引数のbase64エンコーディングのようなものは機能しますか?

base64のエンコード/デコードは、どのプラットフォーム/言語でもかなり簡単に利用できるようです。

4

5 に答える 5

5

使用している言語はわかりませんが、PHPには便利なurlencode機能があり、C#には便利な機能があり、URLの一部を適切にエンコードする必要がありますHttpUtility.URLEncodeServer.UrlEncode

別の方法が必要な場合は、このページにエンコードされた値のリストがあります。例:/ == %2f

アップデート

あなたが更新したものから、私はVoyagerfanのURLRewritingのアイデアを使って次のようなものを作ると思います:

http://www.example.com/([A-Za-z0-9/]+) http://www.example.com/?page=$1

次に、アプリケーションのGETパーサーを使用してフィルターで除外します。

于 2008-10-27T22:46:11.300 に答える
3

Apacheリライトを使用してリライトhttp:// mycompany.com/PartOfUrl1/PartOfUrl2し、標準のGETパラメーターとしてhttp:// mycompany.com/path/to/program.php渡すことができます。ArgumentTo/Url/GoesHereしたがって、サーバーが実際に送り返すのは、http:// mycompany.com/path/to/program.php?arg=ArgumentTo/Url/GoesHere

書き換えは、テクノロジーの変更を防ぎ(たとえば、PHPからASPに切り替えてもURLは変更されません)、同時にユーザーにわかりやすいURLを提供するための優れた方法です。

アップデート

サンプルのURLを使用し、前に述べたことに基づいて、httpd.confまたは.htaccessでこのコードを使用すると思います。

RewriteEngine On

RewriteRule http:// mycompany.com/PartOfUrl1/PartOfUrl2/([A-Za-z0-9]) http://mycompany.com/path/to/program.php?arg=$1

(ところで、の最初の後にスペースを削除しhttp://RewriteRuleさらにその行に改行を含める必要はありません。)

パス、ファイル名、引数の名前などを変更しても問題ありません。ここで重要な部分は、正規表現(([A-Za-z0-9]))と$1。です。

于 2008-10-27T22:51:35.750 に答える
1

はい、引数の Base64 エンコードは機能しますが、URL 全体がターゲット ブラウザーのサイズ制限 (このページによると、IE 4 ~ 7 の場合は 2083 文字) 未満であることを確認する必要があります。

于 2008-10-27T23:28:23.383 に答える
0

.netを使用している場合、多くのオーバーライドがあるため、探しているのはHttpUtility.EncodeUrl()メソッドだと思います。ここを見てください:http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

于 2008-10-27T22:46:17.417 に答える
0

サーバーオブジェクトでHtmlEncodeメソッドとDecodeメソッドを使用します。これにより、あるべきではないほとんどの文字が削除され、スペースなどの他の処理が行われると思います。

これがMSDNの記事です:http: //msdn.microsoft.com/en-us/library/ms525347.aspx

于 2008-10-27T22:46:22.843 に答える