2010-06-10 4 views
0

jquery ajax를 사용하여 php에 데이터를 게시하고 있지만 입력에 '이 있으면 데이터가 게시되지 않습니다. 나는 encodeURIComponent을 시도했지만 작동하지 않을 것이다.아약스와 함께 아포스트로피 문제가 PHP에 게시

이것에 대한 아이디어가 있으십니까?

감사

편집 : 내 코드

var name = $("input#name_add").val(); 
     name = encodeURIComponent(name); 

$.post("function.php", { name: name }, function(data) { 

           //codes 
       }); 



$query = "UPDATE `table` SET name = '" . stripslashes($_POST['name']) . "' WHERE ID = '$id'"; 
$result = mysql_query($query); 
if ($result){ 
print "ok"; 

} 
+0

수 우리가 클라이언트/서버 코드 코드 조각? – Anax

+0

스 니펫을 추가했습니다 .. –

+0

게시 방법을 사용할 때 왜 문자열을 인코딩합니까? get을 사용하는 경우에만 필요합니다. – 2ndkauboy

답변

0

get_magic_quotes_gpc()와 함께 서버에 설정 마법 따옴표를 확인하십시오. 사용 중이면 mysql_real_escape_string()을 사용하기 전에 strip_slashes()해야합니다.

예를 들어 get_magic_quotes_gpc() 설명서를 확인하십시오.

+0

을 확인했는데 –

+0

젠장, 자바 스크립트에서 아포스트로피를 이스케이프 처리하는 방법을 찾지 못했습니다. –

0

magic_quotes_gpc이 꺼져있는 이유는 무엇입니까? 쿼리에서 슬래시를 제거하는 이유는 무엇입니까?

보십시오 : 당신이 어떤을 가진 거 원인 문제가있어

$query = "UPDATE `table` SET name = '" . mysql_real_escape_string($_POST['name']) . "' WHERE ID = '$id'"; 

당신은 당신이 그것을 전달하기 전에 데이터를 이스케이프 할 필요가 없습니다 POST를 사용하는 경우,하지만 MySQL을위한 코드에 위해서 stripslashes를 사용하여 아포스트로피 다음 SQL은 이스케이프되지 않습니다. 아포스트로피 인코딩하지 않습니다

+0

"POST를 사용 중이라면 탈출 할 필요가 없습니다 데이터를 전달하기 전에 "하지만 특수 문자가 아약스를 깨는 경우 자바 스크립트에서 탈출하지 못했습니다 –

+0

@Ahmet vardar 그게 전부 당신 코드입니까? js에서는'encodeURIComponent'를 사용하지만 PHP에서는 슬래시를 제거합니다. 'encodeURIComponent'는 16 진수 코드를 슬래시로 인코딩하지 않습니다. 왜 슬래시를 제거할까요?슬래시를 제거하면 이스케이프 처리되지 않은 데이터를 mysql에 전달하여 어쨌든 mysql 삽입 문제는 아포스트로피를 사용할 때 중단됩니다. –

+0

ok 나는 슬래시를 mysql_real_escape_string으로 바꿨다. js에서는 이것을 temp로 만들었다. 솔루션 이름 = name.replace (" '", ""); –

4

에 encodeURIComponent이 시도 :

encodeURIComponent(str).replace("'", "%27"); 
0

이 나를 위해 그것을 해결하는 것이다. 자바 스크립트 encodeURIComponent() 함수는 아포스트로피를 % 27로 인코딩하지 않으므로 직접 replaceAll() 함수를 사용했습니다.

JS 코드 조각 :

name = encodeURIComponent(name.replaceAll("'", '%27')); 

이 내 유틸리티에서 완전히 대체하기() 함수는 JS 파일입니다 :

String.prototype.replaceAll = function(f, r, no_escape) { 
    var rexp = new RegExp(Util.EscapeRegExp(f), 'g'); 
    if (no_escape) { rexp = new RegExp(f, 'g'); } 
    return this.replace(rexp, r); 
}; 

을 내 목적을 위해, 나는 % 이하이어야 할 아포스트로피 필요 27 더 이상 PHP 함수 urldecode()는 아포스트로피도 수행하지 않으므로 str_replace()를 사용하여 처리했습니다.

PHP 코드 조각 :

$name = str_replace('%27', "'", urldecode($_POST['name'])); 
관련 문제