8

URLを使用してHTMLページを開き、ページのURLを使用してクエリ文字列でデータを送信しています。

例えば:abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue

問題は、firstvalueまたはsecondvalueパラメータにのような特殊文字が含まれている場合#,(,),%,{、私のURLがうまく構築されていないことです。この場合、URLは検証されていません。私はこれをすべてでやっていますjavascript。どんな体でもこれを手伝ってくれませんか。

4

2 に答える 2

19

3つのオプションがあります。

escape() will not encode: @*/+

encodeURI() will not encode: ~!@#$&*()=:/,;?+'

encodeURIComponent() will not encode: ~!*()'

ただし、他のページのGETパラメーターにURLを渡したい場合は、escapeまたはencodeURIComponentを使用する必要がありますが、encodeURIは使用しないでください。

于 2012-05-27T06:23:17.690 に答える
7

安全を確保し、RFC1738とRFC3986の両方で指定されているすべての予約文字を確実にエスケープするには、encodeURIComponent、escape、およびアスタリスク('*')の置換を次のように組み合わせて使用​​する必要があります。

encoded = encodeURIComponent( parm ).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");

[説明]RFC1738:Uniform Resource Locators(URL)は、*、!、'、(、および)文字をURLにエンコードせずに残すことができると指定していますが、

したがって、英数字、特殊文字 "$-_。+!*'()、"、およびそれらの予約目的で使用される予約文字のみを、URL内でエンコードせずに使用できます。

RFC 3986の12〜13ページには、これらの特殊文字はサブ区切り文字として予約されていると記載されています。

予約済み=gen-delims/ sub-delims

gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "、" / ";" / "="

escape()関数は非推奨になりましたが、感嘆符、一重引用符、左括弧、および右括弧をURLエンコードするために使用できます。また、アスタリスクをURLにエンコードする必要があるかどうかにはあいまいさがあり、エンコードしても問題がないため、replace()関数呼び出しなどを使用して明示的にエンコードできます。[escape()関数は、2番目のパラメーターとして最初のreplace()関数呼び出しに渡されていることに注意してください。ここで使用されているように、replaceは!、'、(または)の一致する特殊文字ごとにescape()関数を1回呼び出し、escapeはその文字の'エスケープシーケンス'を返すだけで、エスケープされた文字を他の文字と再構成します。フラグメント。]

「https://stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character」も参照してください

また、一部のWebサイトでは、asterkisk(*)がRFC3986で予約文字として識別されていますが、URLコンポーネントエンコーディングツールには含まれていません。

エンコードされていないURLパラメーター:

parm1=this is a test of encoding !@#$%^&*()'
parm2=note that * is not encoded

エンコードされたURLパラメーター:

parm1=this+is+a+test+of+encoding+%21%40%23%24%25%5E%26*%28%29%27
parm2=note+that+*+is+not+encodeds+not+encoded
于 2014-01-01T21:11:37.513 に答える