フォームがあります。ユーザーがデータを送信すると、私のスクリプトは php/html のテキストをチェックします
$text1 = strip_tags($text);
次に、データをデータベースに挿入します。しかし、ユーザーが次のようなものを送信すると、「私は完全に <3 このウェブサイト」と挿入されるだけです: 「私は完全に」。どうすればこれを修正できますか?
(タグは外した方がいいです)
フォームがあります。ユーザーがデータを送信すると、私のスクリプトは php/html のテキストをチェックします
$text1 = strip_tags($text);
次に、データをデータベースに挿入します。しかし、ユーザーが次のようなものを送信すると、「私は完全に <3 このウェブサイト」と挿入されるだけです: 「私は完全に」。どうすればこれを修正できますか?
(タグは外した方がいいです)
これらの文字を取り除くのではなく、エスケープする必要があります。htmlspecialchars関数を使用してそれを実現できます。例えば:
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
特殊文字を HTML エンティティとしてエスケープするため、適切に表示されます。
正解は他の回答に記載されているようにhtmlentitiesを使用することですが、$text
タグを削除する前に前処理する配列をいつでも持つことができます。
$search = array('<3', ':<');
$replace = array('<3', ':<');
echo strip_tags(str_replace($search, $replace, $text));
明らかに、これらの特殊なケースの新しいインスタンスを取得するたびに配列を更新する必要があります。したがって、おそらく適切な結果を考える必要があります。
それをデータベースに入れたい場合はstrip_tags
、適切なmysqli_real_escape_string
関数または準備されたステートメント以外は使用しないでください。後で、コンテンツを html ページに出力するときに使用します。htmlspecialchars
タグは同等のものに置き換えることができますが、削除しないでください。使用する
htmlspecialchars()
なぜこれをやりたいのかわかりませんが、次のよう<
に>
して取り除くことができます
$stripped = str_replace(array('<', '>'), '', $text);
しかし、代わりにこのように文字列をエスケープすることをお勧めします
$escaped = htmlspecialchars($text);
// or
$escaped = htmlentities($text);