5

データベースに保存されているページがいくつかあります。セキュリティ上の理由から、すべてのページはDBに保存される前にエスケープされますが、ページを印刷すると、HTMLタグは引き続きエスケープされます。このような

<a href=\"mypage.se\" alt=\"\">Link</a>

明らかに、それはあまりうまく機能しないので、どうすればページをエスケープ解除できますか?html_entity_decodeを試してみましたが、成功しませんでした。

4

4 に答える 4

10

データをデータベースに挿入する前にデータをエスケープする必要がありますが、データを取り出すときにデータをエスケープしないでください。問題の根本的な原因は、データベースから取得された後、収集と調査の間に2回エスケープされていることです。

なぜそれが2回エスケープされているのかを追跡し、それを修正する必要があります。

ただし、既存のデータが壊れたままになる可能性があります(データがデータベースへの途中で2回エスケープされているか、magic_quotes_runtimeを使用してデータベースからの途中でエスケープされているかによって異なります)。もしそうなら、あなたはそれをきれいにする必要があります。この形式のエスケープはHTMLとは関係がなく、。で逆にすることができますstripslashes

クリーンアップは次のようになります。

  1. SELECT * from database_table
  2. 行を更新するための準備されたUPDATEステートメントを作成します
  3. ダブルエスケープされたデータのforeach行stripslashesで、データをプリペアドステートメントに渡します
于 2012-04-30T09:32:45.120 に答える
4

使用stripslashes(): http: //uk3.php.net/manual/en/function.stripslashes.php

于 2012-04-30T09:31:25.880 に答える
0

stripslashes($str)コンテンツを取得し、データベースへのコンテンツの挿入中に追加されたスラッシュを削除するために使用します。

ありがとう

于 2012-04-30T10:41:24.260 に答える
-3

mysqlデータベースの入力文字列は、常にmysql_real_escape_string()を使用してエスケープする必要があり、出力されたら、stripslashes()を使用してエスケープ解除する必要があります。idのような数値の場合、int()を使用して整数に変換してから、範囲をチェックする必要があります。たとえば、idのようなAUTO_INCREMENT列は、デフォルトで1から始まります。したがって、検証チェックでは、$ _GET[]または$_POSTから取得したものをチェックします。 []、int()の数値が> = 1であることを確認します。int()を使用してすべての整数をフィルタリングします。金銭的価値を扱っていて、独自の10進数クラスを持っている場合を除いて、すべての実数をdoubleval()でフィルタリングします。浮動小数点はお金を壊す可能性があります。

于 2012-04-30T09:49:20.887 に答える