そうでない場合は、すでにエンコードされた文字列が&
に&
を回し、再びエンコードされます、あなたはfalse
にdouble_encode
を設定して確認してください。 html_entity_decode
を使用して表示すると、まだエンコードされているかのように表示されます。
望ましくない結果:http://ideone.com/uQxuAM
htmlentities($string, ENT_QUOTES, 'UTF-8', false);
を使用すると、これは起こりませんようになります。
次に、html_entity_decode($string, ENT_QUOTES, 'UTF-8');
を使用して値を表示します。
デモ:http://ideone.com/8Jo7YA
しかし、MySQLはデータベース内の復号値を記憶する十分可能です。
htmlentitiesでエンコードされた文字列をデータベースに保存することは決してありません。 CSVやPDFを生成したり、電子メールを送信したり、HTML以外のものを作成したい場合はどうなりますか?
実際には、データをエンコードするプログラミングを二重に実行し、データベースのデータ量を増やし、さらに出力をデコードする必要があるという事実を除けば、なぜオンラインで記事をオンラインにしていけないのですか?
結果として出力結果をhtmlで表示するために、値をエンコードする必要があります。
代わりにあなたが実際にデータベースに追加されたものを表示するには、成功メッセージとして出力をフォーマットする次に、準備された文
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
を使用し、まだ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) . "')";
以上を使用して入力をエスケープする必要があります。
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
は今のブラウザでレンダリングされたHTMLを持っているhtml_entity_decode
を使用する必要はありません。
PHPには、文字列除外機能とフラグ設定タイプがあります。それは本当にあなたが保管しているものに依存します。
のものだけを保管しているなら、HTMLエンティティと文字列の消毒をお勧めします。 XSSの保護とフィルタリングに関しては、フレームワークまたはライブラリを使用することをお勧めします。何年もの間、私はHTML/XMLを保存するときにコードイグナイターXSS_cleanクラスを使用します。参考:http://php.net/manual/en/filter.filters.sanitize.php –