double_encode
を設定していることを確認してください false
に 、それ以外の場合は、すでにエンコードされている文字列が再度エンコードされ、&
になります。 &
に 。次に、html_entity_decode
を使用して表示する場合 、まだエンコードされているように見えます。
望ましくない結果: http://ideone.com/uQxuAM
htmlentities($string, ENT_QUOTES, 'UTF-8', false);
を使用する これが起こらないようにします。
次に、html_entity_decode($string, ENT_QUOTES, 'UTF-8');
を使用します 値を表示します。
ただし、MySQLはデコードされた値をデータベースに完全に保存できます。
htmlentitiesでエンコードされた文字列をデータベースに保存する必要はありません。 CSVやPDFを生成したり、メールを送信したり、HTML以外のものを送信したりするとどうなりますか?
データのエンコードの2倍のプログラミングを実行し、データベース内のデータの量を増やし、それでも出力をデコードする必要があるという事実を除けば、オンラインですべきでない理由を答える記事がたくさんあります。
したがって、結果のデータ出力をhtmlで表示するために値をエンコードするだけで済みます。
代わりに、mysqli_real_escape_string
を使用して入力をエスケープする必要があります
$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
. "VALUES(" . mysqli_real_escape_string($string) . "')";
または、プリペアドステートメントを使用することをお勧めします
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
次に、出力を成功メッセージとしてフォーマットして、データベースに実際に追加されたものを表示します。
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
これで、html_entity_decode
を使用する必要はありません。 ブラウザでHTMLをレンダリングします。