<br/>
or&、<などを含む文字列の刺し傷に問題があります。
DBに保存する前に、このようにエスケープしています
nl2br(htmlentities($string, ENT_QUOTES, 'UTF-8'));
ただし、保存された結果を表示すると、次のようなものが表示されることがあります
&lt;br /&gt;&lt;br /&gt;<br /><br /><br /><br />
誰かが文字列をエスケープするための最良の方法を教えてくれますが、それを画面に表示したいときにブレークポイントなどを保持できますか?
ありがとうございます
あなたが設定を確認してくださいdouble_encode
にfalse
それ以外の場合は、すでにエンコードされた文字列を回し、再びエンコードされます、&
に&amp;
。その後、を使用して表示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をレンダリングするためにを使用する必要はありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加