値ひとつか、URL全体か
2つのモードの違いは、&、=、?、/、# に手を付けるかどうかです。
値ひとつはこれらもすべて変換します。検索語やリダイレクト先のように、パラメータの中に入る値に使います。?next= に続けるURLをこのモードで変換しないと、中の & が新しいパラメータの始まりとして読まれ、値が途中で切れます。
URL全体は構造を作る文字を残します。すでに完成したURLで、空白や日本語だけを整えたいときに使います。このモードなら https:// のスラッシュもそのまま残るので、リンクは動いたままです。
迷ったときの基準はひとつです。URLの一部を組み立てているなら値ひとつ、すでにURLを持っているならURL全体です。
空白は + か %20 か
どちらも見かけますが、使う場所が違います。%20 はURLのどこでも通じる標準の書き方です。+ はHTMLフォームがデータを送るときの古い規則で、クエリ文字列の中でだけ空白として解釈されます。
パスの中の + は空白ではなく、ただのプラス記号です。ファイル名にプラスを含むURLをフォームの規則でデコードすると、名前が変わってしまいます。このツールは標準に従って空白を %20 にします。
二重にエンコードされた値
デコードした結果に %2520 や %253A が残っていたら、値が2回エンコードされています。% 自体が %25 に変換された跡です。
たいていは、すでにエンコード済みの値をコードがもう一度エンコードして起きます。もう一度デコードすれば元に戻りますが、本当の解決はエンコードする場所を決めることです。値をURLに差し込む地点で一度だけエンコードし、その前後では元の文字列のまま受け渡します。
変換されない文字
A-Z、a-z、0-9 と -、.、_、~ は仕様が安全と定めた文字なので、そのまま残ります。これらが変わらないのは不具合ではありません。
日本語はUTF-8で1文字3バイトなので、%E3%81%82 のように3つの組になります。エンコードしたURLが急に長く見えるのはこのためです。