4

複数のウィキペディアの URL を受け取るために、API への jquery 呼び出しを行うページがあります。次に、URL から記事名を抽出し (つまり、get sciencefromhttp://en.wikipedia.org/scienceなど)、それぞれに単一引用符 (') を追加し、それらをつなぎ合わせて、最後に php ページに送信し、mysqlselect * from MyTable where title in('name1','name2','name3','name4')呼び出しを行います。この問題は、記事名にすでに単一引用符が含まれている場合 (つまり、「ヒックの法則」)、where in単一引用符が壊れている場合に発生します。私が使用しているコードは次のとおりです。

$.getJSON('http://ajax.googleapis.com/ajax/services/search/web?q=keyword site:en.wikipedia.org&rsz=8&v=1.0&callback=?',
                function (r) {
                var urls1="";
                $.each(r.responseData.results, function(i, item) {
                var thisurl = (i==0) ? "'" +  item.url.substring(item.url.lastIndexOf('/') + 1) + "'" : ",'" + item.url.substring(item.url.lastIndexOf('/') + 1) + "'";
                urls1 += thisurl.replace(/_/g,'%20');

});});
$('#quotes').html($('<div>').load('pr.php?s='+urls1 +' #quotes', function() {}

記事名に一重引用符を追加しているので、文字列はすべて mysql の準備ができているはずwhere inです。

要約すると、手順は次のとおりです。

  1. API 呼び出しを行い、複数のウィキペディアの URL を取得します。
  2. 各URLから記事名を取得し、
  3. urls1アンダースコアをスペースに置き換えながら、それらを文字列に追加します
  4. urls1文字列を ajax 経由で pr.php ページに送信します。
  5. pr.php では、次のことを行います。"SELECT * FROM MyTable WHERE title in".$_GET['s']

やってみmysql_real_escape_string($_GET['s'])ましたがうまくいきませんでした。

記事名内の単一引用符をエスケープしてwhere in壊れないようにしていますが、機能していません。上記を次のように変更してみました

var thisurl=(i==0) ? "'"+item.url.substring(item.url.lastIndexOf('/') + 1).replace(/'/g, "\'")+"'":",'"+item.url.substring(item.url.lastIndexOf('/') + 1).replace(/'/g, "\'")+"'";

しかし、うまくいきませんでした。何か案は?

ティア!

4

2 に答える 2

1

クライアント側ではなく、サーバー側で SQL クエリをサニタイズする必要があります。

サーバーによって受信されたリクエストは、JavaScript コードによって生成された場合、正しくエスケープされる可能性がありますが、クライアントからのリクエストの送信方法を制御することはできません (決して制御することはありません)。

例: ブラウザーのアドレス バーに、適切と思われる数の引用符を含む URL を明示的に入力できます。

PHP 側では、 mysql_escape_string を使用できます。

<?
    $sanitized = array();
    foreach( $wikiPages as $page ){
        $sanitized[] = mysql_escape_string($page);
    }
    $values = "'".implode("','", $sanitized)."'";
于 2013-03-07T13:10:05.560 に答える
0

'HTML コンテンツであるため、 のインスタンスをに置き換えることができるはずです&quot;。その後、ブラウザに正しく表示されますが、同じ置換を実行する必要があるコンテンツに対して検索を実行するときは、認識しておく必要があります (たとえば、検索用語としての「ヒックの法則」は、WHERE条項ステートメントで「ヒックの法則」になります)。 )。

PHP にはおそらく HTML をエスケープする機能が組み込まれているため、自分で処理する前にそれを探すことをお勧めします。

于 2013-03-07T13:03:06.850 に答える