1

rfc 3986に準拠させるために、URI をエンコードする関数を作成しようとしています。

つまり、英数字以外のすべての文字をチェックします。/?:@&=+$-_.!~*'()|\^[]``#に置き換えられます%[hex octet]

関数が既にエンコードされた URI で呼び出された場合、コードがそれを台無しにしないことを確認したいと思います。

これまでのところ、'%' 記号とそれに続く 2 つのオクテット文字を探しているだけです。私が見つけた他の予約文字はすべて置き換えます。

私がしなければならない他のチェックはありますか?

セキュリティの問題は気にしないでください。それらは別の場所で処理されています。

4

2 に答える 2

1

適切にエンコードされた URI は、2 回目は常にきれいに通過する必要があると思います。

その理由は/ @ . : ? & =、適切な場所に表示される場合、URI などの文字を使用することは完全に合法であるため、URI を正しく解析する必要があるためです。

したがって、URI のその部分で正当でない場合にのみ、文字をエンコードします。そのアサーションを使用して、すべての位置で正当なエンコードされた文字列を作成するため、それを解析すると、エンコードするものが残りません。

誰かがエンコードする URI を投げてきて、それがあいまいな場合 (つまり、URI 構文を変更する特殊文字が含まれている場合)、正しい結果を期待できないことに注意してください。

あなたの質問にもっと直接的に答えるには、私はイエスと答えます。上記のすべてに照らして、%エスケープ シーケンスを特別に処理する必要があるだけです。

于 2012-10-10T01:48:29.373 に答える
0

ええと、既にエンコードされた URI を再度エンコードしてはならないことをどのように知ることができますか? たぶん、URIにはURIをエンコードする方法の例が含まれていますが、2回エンコードされない場合、デコードによって壊れますか?

そうは言っても、許可された文字プラスのみ%が存在するかどうか、およびすべて%の後に16進数が続くかどうかを確認できます。はいの場合、エンコードが既に完了している可能性が高い (ただし保証はありません)。

于 2012-10-10T01:36:17.027 に答える