0

フォームを使用して Web サイトにニュースを入力しています。ニュースの追加または編集中に、\r または \n が br に置き換えられます。

今でも問題があります。たとえば、「I've」と書くと、I\'ve として出力されます。

最初の質問は、これは mysql_real_escape_string(); が原因で発生したものですか? ? 2 番目の質問です。複数の一致を異なるタグに置き換えるにはどうすればよいですか?

今、私はこのようなものを持っています:

$order = array("'", "\'");
$replace = "´";
$order = array("\r\n", "\n", "\r");
$replace = "<br />";
$string = $news;
$insert = str_replace($order, $replace, $string);

それらはすべて同じ変数に割り当てられているため、これは正しい方法ではないとほぼ確信しています..誰かが私を正しい方向に向けてもらえますか?

編集:これは機能しますが、このようにコーディングすることは「許可」されていますか?

編集:ご回答いただきありがとうございます。問題は修正されました。:)

4

5 に答える 5

2

はい、これは正しい方法ではありません。

まず、html とデータベースで一貫した文字セットを使用していることを確認する必要があります。次に、魔法のルールを思い出してください: 入力をサニタイズせず、常に出力をサニタイズする。

つまり、データベースに入れるデータへの唯一の変更は mysql_real_escape_string() (またはバインドされたパラメーターを使用する) である必要があります。ブラウザへの出力には、htmlentities() を使用します。これらの独自のバージョンを作成しようとしないでください。コンテンツを正しくエスケープする適切な方法がない限り、ストリップスラッシュを使用しないでください。

また、 PHP のすべての場所で、addslashes が無効になっていることを確認してください。

于 2013-05-02T12:52:06.957 に答える
0

データベースにデータを挿入する際に、関数html_entity_decodeを使用して特殊文字で html 部分をデコードします。

そして、それをエコーするときは、関数htmlspecialcharsを使用します。これは上記の機能の反対であり、問​​題に直面することはありません。

于 2013-05-02T12:54:08.403 に答える
0

フォームを使用して Web サイトにニュースを入力しています。ニュースの追加または編集中に、\r または \n が br に置き換えられます。

投稿したコードは機能します (少なくとも最後の部分)。ただし、PHP にはこの目的専用の関数があります - nl2br()

今でも問題があります。たとえば、「I've」と書くと、I\'ve として出力されます。

これは、GET または POST データを自動的にエスケープするmagic quotesと呼ばれる非推奨の PHP 構成設定によるものです。mysql_real_escape_string を使用して既に変数をエスケープしている場合は、おそらく安全にマジック クォートを無効にできます。データベースから取り出したデータに対して stripslashes() を呼び出す必要はありません。

于 2013-05-02T12:55:56.163 に答える
0

str_replace() の入力として配列を使用できます。

$order = array("'", "\'","\r\n", "\n", "\r");
$replace = array("&acute;","&acute;","<br />","<br />","<br />");
$string = $news;
$insert = str_replace($order, $replace, $string);

はい、エスケープされた \' はデータベース コードからのものである可能性があります。それらを削除するには、stripslashes() を使用します。

于 2013-05-02T12:50:32.517 に答える
0

関数を簡単に使用できますstripslashes

    stripslashes($string);

公式ドキュメントを見てみましょう

    <?php
        $str = "Is your name O\'reilly?";

        // Outputs: Is your name O'reilly?
        echo stripslashes($str);
    ?>
于 2013-05-02T12:51:29.147 に答える