0

htmlspecialchars は、pdo オブジェクトによってそこに配置されたエスケープされたアポストロフィの前にバック スラッシュを削除するために、私のページでは機能しません。これは、自分のページで漢字を表示するために UTF-8 を使用しているためだと思います。英語の段落と中国語の段落を表示しようとしています。これは私が使用しているコードです:

$english=htmlspecialchars($row["english"], ENT_QUOTES, 'UTF-8');

何らかの理由で、常に次のように表示されます。

Don\'t

エスケープ文字の削除はありません...

4

3 に答える 3

4
  1. PDO オブジェクトは にスラッシュを配置しません'
  2. htmlspecialchars()スラッシュを削除しないでください
  3. HTML での表示中に一重引用符をエスケープするのは実際には正しくありません。二重引用符だけが特別な記号です。

では、XY問題のよくある例を示します(学生にこの質問を見せてもいいですか?)

何が問題なのかを理解するには、次のことを知る必要があります。

  1. magic_quotes\が有効になっている場合、PHP は入力引数に追加できます。これらをオフにする必要があります (php.ini を介して、またはphp < 5.3 の実行時)。また、 magic_quotes_sybaseもオフにします。
  2. データベースにデータを挿入する際、(場合によっては)一重引用符をエスケープする必要があります。これは通常、正しく使用している場合、PDO 関数によって行われます。bindParamを使用している場合、他のエスケープを使用する必要はありません。
  3. データベースからデータをフェッチしている間、magic_quotes_runtimeで問題が発生する可能性があるため、それらをオフにしてください。
  4. 最後に、データを HTML に出力しています。ここでは属性を使用する必要がありますhtmlspecialchars()が、デフォルトのもので問題ないため、属性は使用しません。

1 つまたは 2 つの問題がある場合 - データベース内のデータが既に破損している可能性があるため、誤って追加せずに再保存する必要があり\ますstripslashes()。システムの通常の作業中に、適切なアプローチを使用する必要があります。

于 2013-11-01T21:26:59.147 に答える
2

しないでください

こんなことはまずあってはならない。症状を治療するのではなく、修正する必要があるバグがさらに上流にある可能性があります (データがデータベースに挿入されるときなど)。

于 2013-11-01T21:22:23.257 に答える