複数のウィキペディアの URL を受け取るために、API への jquery 呼び出しを行うページがあります。次に、URL から記事名を抽出し (つまり、get science
fromhttp://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
です。
要約すると、手順は次のとおりです。
- API 呼び出しを行い、複数のウィキペディアの URL を取得します。
- 各URLから記事名を取得し、
urls1
アンダースコアをスペースに置き換えながら、それらを文字列に追加しますurls1
文字列を ajax 経由で pr.php ページに送信します。- 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, "\'")+"'";
しかし、うまくいきませんでした。何か案は?
ティア!