0

非常に簡単です。自分のWebサイトにテキスト領域の投稿があり、次のように入力すると次のようになります。

line 1
line 2
line 3

その中に、それは出力します:

line 1nline 2nline 3

私の挿入コードは次のとおりです。

    $status = strip_tags(stripslashes(htmlentities(mysql_real_escape_string($_POST['status']))));
    $uid = strip_tags(stripslashes(htmlentities(mysql_real_escape_string($_POST['uid']))));

    //more stuff

        $sid = rndTxt(16);
        $status = nl2br($status);
        if (!get_magic_quotes_gpc()) {
            $status = addslashes($status);
        }


    $insert = mysql_query("INSERT INTO mingle_status (uid,sid,status,`timestamp`) VALUES ('$uid','$sid','$status',now())") or
    print mysql_error();

と私の出力コード:

while($st = mysql_fetch_assoc($statussql)) {
    $status = stripslashes($st['status']);
    $sid = $st['sid'];
    $td = $st['timestamp'];
?>
<div id="n">
<div id="statuses" class="<?php echo $sid; ?>">
<p><?php echo $status; ?></p>
<div id="statuscomadd" style="background:#E0E0E0;">
<a href="ld.php?uid=<?php $uid; ?>&pid=<?php echo $sid;?>&method=like">Like</a> <a href="ld.php?uid=<?php $uid; ?>&pid=<?php echo $sid;?>&method=dislike">Dislike</a><a href="#" id="time"><?php echo time_since($td) . " ago"; ?></a>
</div>  
</div>

どんな助けでも大歓迎です!:)

4

3 に答える 3

2

nl2br()挿入時に使用する必要はありません。HTMLで表示するときに使用する必要があります。

stripslashes挿入する前に削除する必要があります

于 2012-06-25T09:24:18.330 に答える
1

挿入するときはmysql_real_escape_string()、値を上書きするだけです。データを変更したいだけです(たとえば、データhtmlentities()を表示するときに使用します)。

mysql_*また、新しいコードの関数の使用を停止することも検討してください。それらはもはや維持されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが表示されますか?代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決定できない場合は、この記事を選択するのに役立ちます。あなたが学びたいのであれば、ここに良いPDOチュートリアルがあります。

もう一つのこと:あなたは本当に必要htmlentities()ですか?imoの方が良い解決策は、を使用することhtmlspecialchars()です。それ以外の場合は、すべてのhtmlエンティティが置き換えられます。

また、 XSSから保護するためにstrip_tags()すでに行っているので、使用する必要はないと思います。htmlspecialchars()

今あなたにとって問題はあなたが改行stripslashes()を壊すのを使っているからです\n。私はあなたがそれらを落とすことができると思いますadd/stripslashes

于 2012-06-25T09:31:03.620 に答える
0

strip_tags(stripslashes(htmlentities(mysql_real_escape_string())));からスラッシュを取り除くを使用します\n

mysql_real_escape_string()、またはhtmlentities( ,ENT_QUOTES)HTMLの場合はを使用してください。

また、可能であれば、のhtmlspecialchars()代わりにUTF-8エンコーディングを使用してhtmlentities()ください。htmlentities()HTML表現を持つすべての文字をhtmlspecialchars()変換し、必要な文字のみを変換します。すべてを変換する必要はありません。参照:htmlentitiesとhtmlspecialchars

于 2012-06-25T09:25:19.410 に答える