2017-04-18 10 views
-2

get_magic_quotes_gpc()0입니다.텍스트 백 슬래시 및 작은 따옴표를 바꾸십시오.

나는이 배열에 preg_replace() 사용하는 경우 :

$replace[0]=">"; 
$replace[1]="<"; 
$replace[2]="&"; 
$replace[3]='"'; 

$pattern[0]="#&gt;#"; 
$pattern[1]="#&lt;#"; 
$pattern[2]="#&amp;#"; 
$pattern[3]="#&quot;#"; 

$pass=preg_replace($pattern, $replace, $pass); 

그것은 백 슬래시와 따옴표를 제외하고 작동합니다.

$replace[5]="\\"; 
$pattern[5]="/&#92;/"; 

하지만 실패

나는이 시도.

나는 php5.2

+2

이란 무엇입니까 여기

은 구분 기호로 인기와 충돌하지 않는 슬래시 (/)를 사용하여 문자의 배열을 대체 할 코드 이 코드의 의도? 나는 그 응용에 대해 대단히 우려하고 있습니다. "마술 따옴표"는 이유를 위해 죽었습니다 : 그들은 ** 매우 나쁜 생각이었습니다 **. 이것은 SQL 탈출과 관련이 있습니까? 그렇다면 ** 자리 표시 자 값 **으로 준비된 문을 사용하고 ** 그렇게하지 마십시오. 이 문제와 다른 문제에 대한 조언은 [PHP the Right Way] (http://www.phptherightway.com)를 참조하십시오. – tadman

+0

나는'mysqli' (그리고 준비된 문장)을 PHP 버전 5 이상과 MySQL 4.1.3+를 사용할 수 있다고 읽었다. 당신의 환경이 이것을 지원하지 않는다면, 확실히 업그레이드가 필요할 것입니다. – mickmackusa

+1

'htmlspecialchars()'가 이것을 할 것입니다 ... – miken32

답변

0

귀하의 패턴이 패턴에서 #와 충돌하여 패턴 구분 기호에 따라 일을하지 않았을 수를 사용하고 있습니다. 귀하의 $pattern[5] 패턴이 잘 서비스를 제공해야합니다. 이는 테스트하는 동안 간단한 실수 일 수 있습니다. (Demo)

$pattern[0]="/&gt;/"; 
$pattern[1]="/&lt;/"; 
$pattern[2]="/&amp;/"; 
$pattern[3]="/&quot;/"; 
$pattern[4]="/&#39;/"; 
$pattern[5]="/&#92;/"; 

$replace[0]=">"; 
$replace[1]="<"; 
$replace[2]="&"; 
$replace[3]='"'; 
$replace[4]="'"; 
$replace[5]="\\"; 

$pass="Th&#92;is &lt; is &amp; a &gt; sample &quot;string&#39;"; 
var_export($pass); 
echo "\n"; 
echo preg_replace($pattern, $replace, $pass); 

는 출력 :

'Th&#92;is &lt; is &amp; a &gt; sample &quot;string&#39;' 
Th\is < is & a > sample "string'