0

以前mysql_real_escape_stringはデータベースに情報を入力していましたが、クエリで情報を返すと\\\'、テキストが表示されます。'以前のように、保存時に挿入クエリが途中で止まらないようにしました。記事のタイトルにアポストロフィが含まれていると、記事のタイトルの保存が途中で停止していました。それは修正されました\\\'が、アポストロフィがある場所に到達しました。

例:Microsoft\\\'s $15 Windows 8 upgrade offer to run from June 2nd to January 31st, will include free workshops

データベースからリストを返すクエリ コードは次のようになります (これは抜粋であるため、このループの終了は含まれていません)。

<?php

    $q2 = "SELECT * FROM ReadLater WHERE Folder_ID = 0 AND User_ID = $loggedInUser->user_id ORDER BY dt_added DESC";
    $r2 = mysql_query($q2);

    echo "<div id='folderstitleright'>Unread</div>";

    if(mysql_num_rows($r2)>0)
        {
        echo "<ul id='foldersarticlelist'>";
        $sr2=1;
        while($row = mysql_fetch_assoc($r2))

            {

            echo "
               <li class='box'>

これを止める方法はありますか?魔法の引用符がオンになっているかどうかをテストしましたが、Webホストではそれらを有効にする方法がありません(見つけたので、本当に複雑な方法があるかもしれませんが、まだ見つけていません)彼らはまた、.htaccess ファイルの php フラグを無視すると言っています。

preg_replace を実行しようとしました\\\' to 'が、これまでのところ成功していません。これまで試したことから、クエリが完全に壊れていますが、間違って実行しているか、上記のコードの間違った場所に配置されている可能性があります。

4

3 に答える 3

0

最初に、Web ホストにマジック クォートを無効にするよう依頼します。チェックアウト ページhttp://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpcを読むと、「この機能の警告」を読むことができます。 PHP 5.3.0 で非推奨となり、PHP 5.4.0 で削除されました。」

実行時に無効にすることはできないため、ホストは php 構成の変更を行う必要があります。ホストがマジック クォートの無効化を拒否する場合は、すべての mysql クエリで "mysql_real_escape_string" の代わりに使用する "secVar()" などの php 関数を作成できます。

次に、関数「secVar」は次のようになります。

ウェブホストで「魔法の引用符」が有効になっている場合:

function secVar($var){
    return $var;
}

Web ホストで「マジック クォート」が無効になっている場合:

function secVar($var){
    return mysql_real_escape_string($var)
}

このようにすることで、ウェブホストがマジック クォートを無効にした日、またはホストを変更した場合に、スクリプトをすばやく更新して変数を保護することができます。

この問題を別の方法で捉えることもできます。マジック クォートは、実行時にスクリプトが実行される前に「配置」されます。メモリによって、「マジック クォート」は変数の次の配列に配置されます: $_REQUEST、$_POST、$_GET、$_FILES、およびその他の変数。1. マジック クォートが有効になっているかどうかを確認します。2. 有効な場合は、マジック クォートの影響を受けた各配列の各変数からすべてのスラッシュを取り除きます。

いずれかの解決策がうまくいくはずです。

楽しむ!

于 2012-05-28T18:39:00.933 に答える