1

PHP を使用して mysql に保存する前に textarea の改行をエンコードする場合、rawurlencode改行を としてエンコードします%0D%0A

例: ユーザーが入力した textarea テキスト:

a
b

rawurlencode を使用してエンコードし、データベースに格納すると、値が次のように格納されます。a%0D%0Ab

データベースから取得し、使用してデコードするとrawurldecode機能せず、コードでエラーが発生します。この状況を克服する方法と、テキストエリアの値を保存、取得、表示する最良の方法は何ですか。

4

3 に答える 3

1

データベースのデータをエスケープするためにrawurlencode を使用しないでください。

各ターゲット形式には、一般的に、ある場所から別の場所に安全に保存/表示/転送されることを確認する独自のエスケープ方法があり、反対側でデコードする必要はありません。

例えば:

  • テキストを HTML で表示するには、htmlentities または htmlspecialchars を使用します
  • データベースに保存するには、mysqli_real_escape_string、pg_escape_string などを使用します...
  • variablename の転送、urlencode の使用
  • 変数コンテンツの転送、rawurlencode の使用
  • 等...

これらのデコードは、多くの場合、ブラウザ/データベースによって行われることに注意してください。したがって、実際にエスケープされたデータは保存されません。また、コードでデコードを行う必要はありません。

問題はおそらく rawurlencode でシーケンスをエスケープしたためですが、データベースは特定のブランドのデータベースのエスケープ形式を予期していました。そして、その仮定を使用してエスケープ解除しましたが、これは間違っていて、文字列を台無しにしました。

結論: 使用しているブランド データベースを調べ、そのデータベースに固有のエスケープ関数を検索し、すべてのコンテンツ「転送」に対して適切なエスケープ関数を使用します。


PS: 一部の定義が正しくない可能性があります。その点についてコメントしてください。アイデアを定着させたかったのですが、適切な用語をすべて使用していない可能性があります。

于 2010-12-04T20:49:21.113 に答える
1

上記がうまくいかない場合は、最初にこのテキストエリア文字列をエンコードしてから、同じものbase64_encodeを実行できますか。base64_decode

テキストエリアに URL が含まれていない場合は、代わりにbase64_encodethenrawurlencodeを使用してから、通常どおりに保存する必要があります。

于 2010-12-04T20:21:49.773 に答える
0

まず第一に、urlencode() を介して textarea を実行することは非常にまれです。urlencode はこの目的のために設計されたものではありません。

第二に、それでもこれを行いたい場合は、問題はデータベースにある可能性があります。まず、使用しているデータベースと、このデータを保存するために使用しているタイプを教えてください。保存するのは TEXT データですか、それとも BINARY データですか? データベースに正しい文字セットを設定しましたか?

于 2010-12-04T20:26:30.330 に答える