データベースのデータをエスケープするためにrawurlencode を使用しないでください。
各ターゲット形式には、一般的に、ある場所から別の場所に安全に保存/表示/転送されることを確認する独自のエスケープ方法があり、反対側でデコードする必要はありません。
例えば:
- テキストを HTML で表示するには、htmlentities または htmlspecialchars を使用します
- データベースに保存するには、mysqli_real_escape_string、pg_escape_string などを使用します...
- variablename の転送、urlencode の使用
- 変数コンテンツの転送、rawurlencode の使用
- 等...
これらのデコードは、多くの場合、ブラウザ/データベースによって行われることに注意してください。したがって、実際にエスケープされたデータは保存されません。また、コードでデコードを行う必要はありません。
問題はおそらく rawurlencode でシーケンスをエスケープしたためですが、データベースは特定のブランドのデータベースのエスケープ形式を予期していました。そして、その仮定を使用してエスケープ解除しましたが、これは間違っていて、文字列を台無しにしました。
結論: 使用しているブランド データベースを調べ、そのデータベースに固有のエスケープ関数を検索し、すべてのコンテンツ「転送」に対して適切なエスケープ関数を使用します。
PS: 一部の定義が正しくない可能性があります。その点についてコメントしてください。アイデアを定着させたかったのですが、適切な用語をすべて使用していない可能性があります。