安全を確保し、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