2012-05-15 5 views
0

나는 양식을 가지고 있고 사용자는 이제mysql_real_escape_string 이상한 아포스트로피 동작? 난 그냥 없애,하지 말라고 탈출 ... 간단한와 아포스트로피를 제거 슬래시를 추가하지하려면,

My Bday' 

(문자열의 끝에 노트 아포스트로피) 등을 입력 반환되는 결과는 다음과

$event_title = mysql_real_escape_string($_POST['event_title']); 

echo "<br /><br /><br />event title is $event_title"; 

: 그들

는 첫째로 나는 다음이

event title is My Bday\\\' 

왜 3 개의 슬래시가 필요합니까?

그래서, 그때 사용하여이 함께 가서 거래를 다음

event title is My Bday\ 
:

$event_title = str_replace("'", "", $event_title); 

$event_title = stripslashes($event_title); 

그럼 내가 다음 얻을 결과

echo "<br /><br /><br />event title is $event_title"; 

을 확인하기 위해 다시 돌아

어떤 아이디어가 있습니까? 그런데 나는 단순히 apostophes와 슬래시를 제거하고 싶지만 어떻게 든

magic_quotes_gpc의 일어나고 아니에요 꺼져

나는 다음과 같은 오류를 처리하기 위해 MySQL을 위해 그들을에서 떠나 그러므로 위해서 stripslashes를 사용하지 않는 경우 :

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'Private', 
event_notes = '' where user_event_id = '35'' at line 3 

update user_events set event_date = '2012-11-17', event_title = 'My Bday\\\', 
event_vis = 'Private', event_notes = '' where user_event_id = '35' 

확인, 추가 편집 :

$event_title = $_POST['event_title']; 

$event_title = str_replace("'", "", $event_title); 

$event_title = trim($event_title); 

$event_title = mysql_real_escape_string($event_title); 

echo "<br /><br /><br />event title is $event_title"; 
:

이 시도

내가 얻을이 :

단순히 아포스트로피를 제거 할
event title is My Bday\\ 

, 다른 분명히 뭔가 여기 벌어지고 있지만이 날 잡았어!

+2

답변은 없지만 실제로 [this] (http://chat.stackoverflow.com/transcript/message/3656047#3656047)를 읽어야합니다. . – PeeHaa

+1

사용자가 입력 한 내용을 제공하지만 이스케이프되기 전에'$ _POST [ 'event_title']'과 정확히 동일합니까? – Jon

+0

mysql_real_escape_string은 data-> sanitize-> storage가 아니고 data-> sanitize-> 출력이 아닌 경우,이 패턴을 따르면 데이터가 올바르게 표시됩니다. data-> sanitize-> storage-> output –

답변

1

이있다 '방법'의 \를 해석한다. 그러나 단지 슬래시를 추가하면 DB에 이스케이프 처리되지 않은 문자가 저장되므로 슬래시를 삽입하기 전에 이스케이프 처리해야합니다.

그런 이유로 My BDay\\\'입니다. 이 값이 DB에 저장되면 최종 결과는 My BDay\'이됩니다.

그러나 당신은 당신이 My BDay\\\로하고 당신은 My BDay\을 얻을 것이다 이것에 stripslashes를 호출 한 후 종료됩니다 str_replace("'", "", 'My BDay\\\'');을 수행 할 때 - 즉 절대적으로 정확!당신이 와서 어떻게

그래서 그냥 DB에 그 값을 저장하고 검색 한 후 다시 My BDay'으로 끝날 것 mysql_real_escape_string를 호출 한 후 문자열과 같은 방법으로 귀찮게하지 않습니다

...

편집stripslasshes에게 전화 한 후 세 명 중 한 명만 찾으시겠습니까? 이 함수는 문자열의 처음부터 끝까지 이동하여 이스케이프 처리 된 문자를 찾아 이스케이프 처리하는 슬래시를 제거합니다. 그래서 첫 번째 두 개의 슬래시를 찾아 하나를 제거하지만 두 개의 남아 있습니다 (방금 처리 된 것과 세 번째 것). 따라서 두 개의 슬래시가 처리되어 남아있는 슬래시가 하나만 남게됩니다.

문자열 My BDay\\\'에 'D 통화 위해서 stripslashes - My BDay'으로 이어질 것 ...

EDIT2 내 나쁜

은 ... 다음 두 슬래시는 당신이 magic_quotes_gpc을 가지고 있기 때문에 아마 추가 - 그 전원을 끄거나 mysql_real_escape_string(stripslashes($string))를 호출합니다.

+0

업데이트 된 질문, 당신이 말하는 것은 일어나지 않아야합니다 - 당신은 말합니다 : 만약 당신이 My BDay 문자열에 stripslashes를 부르면 - My는 BDay '- 내 경우 엔 두려워하지 않습니다. - 순서대로 op를 봅니다. 나는 것들을 처리합니다. –

+1

-1 : 단순히 잘못되었습니다. 'mres'는 각 문자에 대해 * 하나의 백 슬래시를 추가하기 만하면됩니다. 여분의 백 슬래시는 다른 곳에서 나옵니다. – Jon

+0

원본 게시물에 magic_quotes_gpc가 설정되어 있지 않다고 나와 있습니다. 그러나 mysql_real_escape_string (stripslashes ($ string))이 수정되었으므로 b * ll ache! 참을성있는 동료에 대한 많은 감사합니다 –

0

아포스트로피를 벗어나는 슬래시 하나와 아포스트로피를 벗어나는 슬래시를 벗어나는 슬래시.

mysql_real_escape_string

이스케이프 된 문자 앞에 슬래시를 추가하여 탈출해야 모든 문자를 이스케이프 :

는 내부적으로 MySQL은

무슨 일
0

PHP 설정에서 string_splash 설정이 ON이고 그 이유는 문자열이 양식에서 전달 될 때 이미 삭제 된 것입니다 ... 이제 mysql_real_escape_string을 사용합니다 - 작은 따옴표뿐만 아니라 "excape 문자"도 제거합니다 . 그리고 그 이유를 세 가지 슬래시 ..

이 기능을 사용해보십시오 - 나는

function sanitize($value) 
{ 
    if(get_magic_quotes_gpc()) 
    { 
      $value = stripslashes($value); 
    } 
    //check if this function exists 
    if(function_exists("mysql_real_escape_string")) 
    { 
      $value = mysql_real_escape_string($value); 
    } 
    //for PHP version < 4.3.0 use addslashes 
    else 
    { 
      $value = addslashes($value); 
    } 
    return $value; 
} 

특히 PHP 4 이상 년 ... 함수는 문자열을 탈출하기 위해 작동하지 않는 많은에게 사용 이 (function_exists는 ("는 mysql_real_escape_string는")) 경우

(묻는 질문 beign 인) 이스케이프 두 번하지 않도록 -이 라인은 데이터베이스 연결이 가능하며, 그

다른 일부 유출되는 경우에는 조건 취하면 그것이 작동하는 경우 반드시 기본 연결을 사용할 수없고 php 4 지원은 benifit 만 추가됩니다 ...

+0

왜 php4 지원이 필요하다고 생각하십니까? –