[これは厳密にはプログラミングに関する質問ではないかもしれませんが、プログラマーが最もよく答えるパズルです。最初に Pro Webmasters サイトで試してみましたが、圧倒的な沈黙がありました]
当社のウェブサイトでは、メールアドレスの確認プロセスを実施しています。サイトは最初に適切なキーを文字列として生成します
mykey
次に、そのキーを一連のバイトとしてエンコードします
&$dac~ʌ����!
次に、その一連のバイトをbase64でエンコードします
JiRkYWN+yoyIhIQ==
このキーは、HTML メールに配置される URL のクエリ文字列値として提供されるため、最初にそれを URLEncode し、次に結果を HTMLEncode する必要があります (この例では HTMLEncoding の効果はありませんが、わざわざ例を作り直すことはできません)
JiRkYWN%2ByoyIhIQ%3D%3D
これは、次のような電子メールの一部として送信される HTML に埋め込まれます。
click <a href="http://myapp/verify?key=JiRkYWN%2ByoyIhIQ%3D%3D">here</a>.
Or paste <b>http://myapp/verify?key=JiRkYWN%2ByoyIhIQ%3D%3D</b> into your browser.
受信ユーザーがリンクをクリックすると、サイトはリクエストを受信し、クエリ文字列の「キー」パラメーターの値を抽出し、base64 でデコードして復号化し、サイト ロジックの観点から適切な処理を行います。
しかし、時折、クリックが効果的ではないと報告するユーザーがいます。そのようなユーザーの 1 人が、送信された電子メールを私たちに転送しました。調べてみると、HTML は次のように変換されていました (上記の例で言えば)。
click <a href="http://myapp/verify?key=JiRkYWN+yoyIhIQ%3D%3D">here</a>
Or paste <b>http://myapp/verify?key=JiRkYWN+yoyIhIQ%3D%3D</b> into your browser.
つまり、%2B 文字列 (ただし、他のパーセンテージでエンコードされた文字列はどれも) はプラスに変換されていませんでした。(確実に正しい値が得られます - 適切な SMTP ログを調べました)。
key=JiRkYWN%2ByoyIhIQ%3D%3D
key=JiRkYWN+yoyIhIQ%3D%3D
したがって、次の 2 つの可能性があると思います。
私がやっていることは、ばかげている、見えない、または
一部のメール クライアントは %2b 文字列をプラス記号に変換します。これはおそらく、人々が誤って URL エンコーディングを行うという問題に対処するためです。
1の場合 - それは何ですか? 2 の場合 - この種のシナリオに対処するための標準的な既知の方法はありますか?
助けてくれてありがとう