2013-03-07 5 views
3

api에 대한 jquery 호출로 여러 개의 wikipedia URL을받는 페이지가 있습니다. 그런 다음 URL에서 기사 이름을 추출하고 (즉, http://en.wikipedia.org/science에서 science을 가져옴), 각각에 작은 따옴표 (')를 추가하고 문자열을 함께 입력 한 다음 php 페이지로 보내면 mysql select * from MyTable where title in('name1','name2','name3','name4') 호출이됩니다. where in 작은 따옴표가 깨져서 기사 이름에 이미 작은 따옴표 (예 : "Hick 's law")가있는 경우 문제가 발생합니다.이 시나리오에서 작은 따옴표를 이스케이프 처리하려면 어떻게해야합니까?

$.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. urls1 문자열에 추가,
  3. 각 URL에서 문서 이름을 얻을, 다음과 같이

    그래서 요약하자면, 단계는 밑줄을 공백으로 바꾸는 동안

  4. urls1 문자열을 ajax를 통해 pr.php 페이지로 보냅니다. pr.php에서
  5. 나는 다음을 수행하십시오 "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, "\'")+"'"; 

하지만 작동하지 않았습니다. 어떤 아이디어?

TIA!

+1

[위대한 현실 도피를 (또는 : 당신은 텍스트 내에서 텍스트로 작업하기 위해 알아야 할)] (HTTP : // kunststube.net/escapism /) – deceze

+1

JS를 사용하여 탈출을 시도하는 이유는 무엇입니까? PHP에서 벗어나야합니다 – JamesHalsall

+1

URL을 통해 SQL 문의 절반을 전달하고 있습니까? 그것은 끔찍하고, 오류가 발생하기 쉽고, 명백히 틀린 것처럼 들립니다. json을 PHP로 보내고 json_encode/json_decode를 사용하고 이스케이프 처리하는 서버 측 처리 (예 : 매개 변수화 된 쿼리 사용) – Mahn

답변

0

'의 인스턴스를 HTML 콘텐츠로 대체 할 수 있어야하므로 &quot;으로 변경해야합니다. 그런 다음 브라우저에서 올바르게 표시되지만 동일한 대체를 수행해야하는 콘텐츠에 대한 검색을 수행 할 때주의를 기울여야합니다 (예 : " s 법률 인 "Hick 's law"WHERE 절 성명서).

PHP는 아마도 HTML을 이스케이프하기 위해 내장되어 있으므로 직접 처리하기 전에 PHP를 찾아 보시기 바랍니다.

1

클라이언트 쪽에서 서버 쪽에서 SQL 쿼리를 삭제하면 안됩니다.

자바 스크립트 코드에 의해 생성 된 서버에서 수신 한 요청은 올바르게 이스케이프 처리 될 수 있지만 클라이언트에서 요청이 전송되는 방법을 제어 할 수는 없습니다.

예 : 브라우저 주소 표시 줄에 명시 적으로 여러 개의 따옴표가 포함 된 URL을 입력 할 수 있습니다. PHP는 측면에서

, 당신은 mysql_escape_string 사용할 수 있습니다

<? 
    $sanitized = array(); 
    foreach($wikiPages as $page){ 
     $sanitized[] = mysql_escape_string($page); 
    } 
    $values = "'".implode("','", $sanitized)."'"; 
관련 문제