2017-04-18 52 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正确方法](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'