替换文本反斜杠和单引号
问题描述:
get_magic_quotes_gpc()
是0
。替换文本反斜杠和单引号
如果我使用preg_replace()
与这些阵列:
$replace[0]=">";
$replace[1]="<";
$replace[2]="&";
$replace[3]='"';
$pattern[0]="#>#";
$pattern[1]="#<#";
$pattern[2]="#&#";
$pattern[3]="#"#";
$pass=preg_replace($pattern, $replace, $pass);
它的工作原理,除了反斜杠和单引号。
我尝试这样做:
$replace[5]="\\";
$pattern[5]="/\/";
,但它失败。
我使用PHP5.2
答
根据您的图案与分隔符在模式中#
冲突您模式可能不会奏效。你的$pattern[5]
模式应该很好。在测试过程中,这可能是一个简单的错误。
这里是代码,将使用流行的和非冲突斜杠(/
)作为分隔符来替换你的字符数组:(Demo)
$pattern[0]="/>/";
$pattern[1]="/</";
$pattern[2]="/&/";
$pattern[3]="/"/";
$pattern[4]="/'/";
$pattern[5]="/\/";
$replace[0]=">";
$replace[1]="<";
$replace[2]="&";
$replace[3]='"';
$replace[4]="'";
$replace[5]="\\";
$pass="Th\is < is & a > sample "string'";
var_export($pass);
echo "\n";
echo preg_replace($pattern, $replace, $pass);
输出:
'Th\is < is & a > sample "string''
Th\is < is & a > sample "string'
什么这个代码的意图?我非常关心它的应用。 “魔术引号”因为某个原因而被杀害:他们是一个非常糟糕的主意**。这与SQL转义有关吗?如果是这样,请使用**准备好的语句和占位符值**,但不要这样做。有关此问题和其他问题的建议,请参见[PHP正确方法](http://www.phptherightway.com)。 – tadman
我在某个地方读过'mysqli'(和准备好的语句)可以用于PHP 5或更高版本并使用MySQL 4.1.3+。如果您的环境不支持这一点,那么升级肯定是时候了。 – mickmackusa
'htmlspecialchars()'会为你做这个... – miken32