1

フォームがあります。ユーザーがデータを送信すると、私のスクリプトは php/html のテキストをチェックします

$text1 = strip_tags($text);

次に、データをデータベースに挿入します。しかし、ユーザーが次のようなものを送信すると、「私は完全に <3 このウェブサイト」と挿入されるだけです: 「私は完全に」。どうすればこれを修正できますか?

(タグは外した方がいいです)

4

5 に答える 5

3

これらの文字を取り除くのではなく、エスケープする必要があります。htmlspecialchars関数を使用してそれを実現できます。例えば:

$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;

特殊文字を HTML エンティティとしてエスケープするため、適切に表示されます。

于 2011-08-06T18:02:51.437 に答える
0

正解は他の回答に記載されているようにhtmlentitiesを使用することですが、$textタグを削除する前に前処理する配列をいつでも持つことができます。

$search = array('<3', ':<');
$replace = array('&lt;3', ':&lt;');

echo strip_tags(str_replace($search, $replace, $text));

明らかに、これらの特殊なケースの新しいインスタンスを取得するたびに配列を更新する必要があります。したがって、おそらく適切な結果を考える必要があります。

于 2011-08-06T18:18:02.643 に答える
0

それをデータベースに入れたい場合はstrip_tags、適切なmysqli_real_escape_string関数または準備されたステートメント以外は使用しないでください。後で、コンテンツを html ページに出力するときに使用します。htmlspecialchars

于 2011-08-06T18:57:45.603 に答える
0

タグは同等のものに置き換えることができますが、削除しないでください。使用する

htmlspecialchars()

于 2011-08-06T18:03:23.270 に答える
0

なぜこれをやりたいのかわかりませんが、次のよう<>して取り除くことができます

$stripped = str_replace(array('<', '>'), '', $text);

しかし、代わりにこのように文字列をエスケープすることをお勧めします

$escaped = htmlspecialchars($text);
// or
$escaped = htmlentities($text);
于 2011-08-06T18:12:56.850 に答える