2009-11-12 4 views
0

이 함수가 올바르게 작동하지 않는 이유를 알아 내려고하고 있습니다.따옴표를 이스케이프하는 함수가 올바르게 작동하지 않습니다.

항목을 편집 할 때마다 \이 추가됩니다. 여기

magic_quotes_gpc On 
magic_quotes_runtime Off 
magic_quotes_sybase Off 

코드입니다 :

온라인 서버는 이러한 설정이

function esc($s) 
{ 
    if (get_magic_quotes_gpc()) { 
    if (ini_get('magic_quotes_sybase')) 
     $s = str_replace("''", "'", $s); 
    else 
     $s = stripslashes($s); 
    } //if 
    return mysql_real_escape_string($s); 
} 

편집 노트 : 나는 무엇을보고이 기능을 제거 완전히 시도

... 그리고 그것은 똑같은 일을합니다. 그래서 나는 addslashes이 코드에서 같은 것을 사용한다는 것을 깨달았습니다. 거기, 당신은 또한 PHP의 get_magic_quotes_gpc 기능 페이지를 찾아 보라 할 수 있습니다

function esc($s) 
{ 
    if (get_magic_quotes_gpc()) { 
     if (ini_get('magic_quotes_sybase')) 
      $s = str_replace("''", "'", $s); 

     $s = stripslashes($s); 
    } //if 
    return mysql_real_escape_string($s); 
} 

: magic_quoteON

+0

여분의 백 슬래시가 있음을 의미합니까? "함수의 반환 문자열은 다음과 같습니다." – RMcLeod

+0

예 1 개를 \ 추가로 저장합니다. – lena

+0

@Dukeling 그만하십시오. 마술 따옴표는 마술 따옴표 gpc보다 genaralized 용어입니다. 동의어를 추가하기 만하면 참여할 수 있습니다. –

답변

0

좋아요. 문제가 해결되었습니다. 지금은 빠른 해결책으로 function esc($s)을 삭제했습니다.
php.ini에서 Magic_Quote을 OFF로 변경했습니다.
나는 addslashes 솔루션을 유지합니다.

1

때문에

여분 \ 당신은 아마에 magic_quotes_sybase 같이이 경우에도 위해서 stripslashes 할 있었다 슬래시 제거를위한 상당히 우아한 해결책을 가진 페이지에 대한 몇 가지 사용자 의견입니다.

+0

다른 코드없이 코드를 실행했지만 여전히 동일한 문제가 발생합니다. – lena

+0

슬래시가 너무 많다는 문제가 있습니까?함수에 문자열을 보내기 전에 여분의 슬래시를 추가하지 않았습니까? stripslashes 함수는 한 세트의 슬래시 만 제거합니다. – tplaner

2

귀하의 기능은 거의 의미가 없습니다. 마법 따옴표가 켜져 있으면 (예 : 입력이 이스케이프 된 경우) 이스케이프 처리를 해제합니다. 켜져 있지 않으면 빠져 나옵니다. 따라서 마법 견적을 받았는지 여부에 따라 결과가 달라집니다.

어쨌든 마술 따옴표에 의존하는 것은 실제로 나쁜 습관입니다. 당신은해야한다 :

  1. Disable magic quotes or reverse its effect globally. 당신은 SQL을 구성
  2. 어느escape strings또는 (더 나은) use prepared statements를 쿼리합니다.
  3. 아니요 unescape/strip/데이터베이스에서 복원 할 때 무엇이든간에.
+0

magic_quotes_gpc가 On이더라도 이스케이프 문자열을 사용할 수 있습니까? – lena

+0

"이스케이프 문자열 사용"이란 무엇입니까? – troelskn

관련 문제