escape()で作られた古い文字列やログの値を読み取り、同じ形式のエスケープ表記を生成します。使うのは非推奨のネイティブ関数escape()とunescape()です。%XXと%uXXXXで表し、現在のURLで使うUTF-8エンコードとは異なります。
ブラウザ内でローカルに実行テキストを直接貼り付けて使います。処理はブラウザー内で行い、ファイルのアップロード、URLからの取得、一括処理には対応していません。新規コードでの採用は推奨されない関数です。
A-Z a-z 0-9と @ * _ + - . / はそのまま残します。それ以外のUTF-16コード単位は、値が256未満なら%XX、残りは%uXXXXで表します。16進数字は大文字を使い、必要なら先頭を0で埋めて2桁または4桁にします。uは小文字です。
é は %E9、你好 は %u4F60%u597D になります。😀 は2つのコード単位に分かれ、%uD83D%uDE00 と表されます。~、'、& もそれぞれ %7E、%27、%26 に変換されます。
%u4f60 %GG %U0041 をデコードすると 你 %GG %U0041 になります。16進数字の大文字・小文字は問いませんが、接頭辞のuは小文字に限ります。%、%GG、%u123 は文字列のまま残り、URIErrorにはなりません。混在する有効な部分はデコードされるため、厳密な検証には使えません。
%E4%BD%A0 は 你 にはならず、U+00E4、U+00BD、U+00A0 の各コード単位に変換されます。UTF-8のURL構成要素にはencodeURIComponent/decodeURIComponentを使います。
文字として入力した \n、\u4F60、& は、デコードしてもそのままです。JS/JSONの文字列リテラル解析、HTML実体参照のデコード、コードの実行は行いません。暗号化の機能でもありません。
+は両方向ともそのままで、空白は%20にエンコードされます。%20をエンコードすると%2520になります。%2520をデコードすると、1回の処理では空白ではなく文字列%20が得られます。フォーム形式のデコードではありません。
空白文字の削除やUnicode正規化は追加しません。ただし、textareaは実際の改行をLFにそろえ、エンコード結果は%0Aになります。元のCRLFやCRのバイト列は保持しません。空の入力は空の結果になります。
いいえ。escape/unescapeは%uD800のような孤立したUTF-16サロゲートも受け入れます。表示やクリップボードの処理で置換される場合があり、コピー後の復元は保証しません。ネイティブ関数を利用できない場合は通知し、別の方式で代用しません。