0

スラッシュ付きの通常の URL を持つ URL フィールドを持つ MySql データベースがあります。PHP Web サービスで URL データを取得すると、スラッシュごとにバックスラッシュが表示されます。

http://example.com/iphone/images/test.png

として表示されます

http:\/\/example.com\/iphone\/images\/test.png

何が問題なのですか?


これが私のデータを取得する関数です。

function getdata() {

    // Check for required parameters
    if (isset($_POST["genre"])) {

        // Put parameters into local variables
        $genre = $_POST["genre"];

        // Final result array
        $final_result = array();

        // Look up in database
        $user_id = 0;
        $stmt = $this->db->prepare('SELECT ID, BAND, VENUE, GENRE, DATE, THUMBNAIL_URL, DESCRIPTION FROM shows WHERE GENRE=?');
        $stmt->bind_param("s", $genre);
        $stmt->execute();
        $stmt->bind_result($id, $band_result, $venue_result, $genre, $date, $thumbnail_url, $description);
        while ($stmt->fetch()) {


            $thumbnail_url = stripslashes($thumbnail_url);

            $result = array(
            "id" => $id, "band" => $band_result, "venue" => $venue_result, "genre" => $genre, "date" => $date, "thumbnail_url" => $thumbnail_url, "description" => $description,
            );
            $final_result[] = $result;
            continue;
        }
        $stmt->close();





        sendResponse(200, json_encode($final_result));
        return true;
    }
    sendResponse(400, 'Invalid request');
    return false;
}
4

2 に答える 2

1

これが発生する理由は、ホストでmagic_quotesが有効になっている可能性が高く、ホストごとに異なる可能性があるためです。(ユーザーが送信した入力をエスケープしてセキュリティを強化する無駄な試み) .

したがって、常に有効になっているかどうかを確認するのが最善です。(特に、スクリプトが他の構成に達した場合)

その場合、データベースに挿入する前に不要な余分なスラッシュの削除を処理し、常にmysql_real_escape_sting()またはPDO 準備済みステートメントを使用してデータベースにエスケープします。そうしないと、エラーまたはmysql インジェクションが続きます。

if(get_magic_quotes_gpc()) {
  $genre = stripslashes($_POST["genre"]);
}
于 2011-09-09T00:56:24.237 に答える
-1

データベースにスラッシュで表示されている場合。それはいいです。

それらをデータベースから取り出した後に PHP でそれらを削除したい場合は、stripslashes(); を介して実行します。

$url = stripslashes($url);

データベースに入る前にスラッシュを削除したい場合...上記と同じですが、実行する前によく考えてください:)

于 2011-09-09T00:34:03.187 に答える