sql >> データベース >  >> RDS >> Mysql

PHPMySQL文字列を適切に保存/エスケープする方法

    double_encodeを設定していることを確認してください falseに 、それ以外の場合は、すでにエンコードされている文字列が再度エンコードされ、&になります。 &に 。次に、html_entity_decodeを使用して表示する場合 、まだエンコードされているように見えます。

    望ましくない結果: http://ideone.com/uQxuAM

    htmlentities($string, ENT_QUOTES, 'UTF-8', false);を使用する これが起こらないようにします。

    次に、html_entity_decode($string, ENT_QUOTES, 'UTF-8');を使用します 値を表示します。

    デモ: http://ideone.com/8Jo7YA

    ただし、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をレンダリングします。



    1. mysqloledbドライバー

    2. SQl Server 2008 の 2 つの列に基づく一意のキー?

    3. Redshift / Postgresql LAGウィンドウ関数でレコードを選択的に除外するにはどうすればよいですか?

    4. oraclesqlの動的ピボット-手順