このツールの動作
テキストを UTF-8 のバイト列にし、非予約集合に含まれないバイトをすべて、パーセント記号と16進2桁で書き表します。そのまま残るのは英数字と - . _ ~ です。
それ以外はすべてエスケープされます。URL を構成する文字も例外ではありません。
a b → a%20b
a+b&c=d → a%2Bb%26c%3Dd
café → caf%C3%A9
😀 → %F0%9F%98%80
パーセント符号化であり、フォーム符号化ではない
持ち帰るべき区別はここです。両方向で、静かにデータを壊すからです。
パーセント符号化は、URL のパスと現代的なクエリ文字列が使う方式です。空白は %20 と書かれます。プラス記号は文字どおりのプラスであり、値の中に現れれば %2B としてエスケープされます。
フォーム符号化(application/x-www-form-urlencoded、HTML のフォームが送る形式)は、空白を + と書きます。より古い慣習ですが、今なお至るところで使われています。
このツールは前者の規則を適用します。ブラウザの encodeURIComponent と decodeURIComponent と同じ振る舞いです。
復号したときの帰結
フォーム由来の文字列や、フォーム流儀で書かれたクエリ文字列は、ここではプラス記号が空白に戻らず、そのまま残ります。a+b は a+b に復号されます。
パーセント符号化としては正しく、あなたが望んでいたであろう結果としては誤りです。入力がフォーム由来なら、復号の前に + を %20 に置き換えるか、フォーム用の復号器を使ってください。
16進2桁が続かない単独のパーセント記号は、推測せずエラーとします。100% は復号できず、できるふりをすればバイトを捏造することになるからです。
符号化するのは値であって、URLではありません
URL 全体を渡すと :// や区切り文字までエスケープされ、目的から外れます。値ごとに符号化し、そのうえで URL を組み立ててください。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。