$s1 = 'test\\\\string';
// test\string
$s2 = 'test\\\\\"\\\\\'\\\\string';
// test"'\string
$s3 = 'test\\string\\\\\"';
// test\string"
答案 0 :(得分:4)
使用
preg_replace("~\\\\+([\"\'\\x00\\\\])~", "$1", $string);
只用一个\
替换任意数量的\
。
该模式由任意初始后退\\\\+
和后续符号组成,后面的符号是"
,'
,\x00
或\
之一。替换将有效地删除任何先前的后退。
正则表达式中需要4个反斜杠。两个反斜杠(\\
)将在正则表达式字符串中产生一个反斜杠(\
),因为PHP解释器使用反斜杠来转义特殊字符,如"
或\
。出于同样的原因,你需要在正则表达式中使用两个后退。
或者解释相反:要获得\+
作为正则表达式,您必须添加一个反斜杠来告诉PCRE一个反斜杠不是用于转义+
。要将\\+
作为字符串,您还需要在每个反斜杠之前添加一个反斜杠,以告诉PHP解释器您不想使用第一个反斜杠转义第二个反斜杠。
源代码:\\\\+
在正则表达式字符串中:\\+
模式匹配:\+
答案 1 :(得分:2)
将2个或多个连续斜杠替换为单个斜杠
preg_replace('/\\\\+/','\\',$str);
答案 2 :(得分:2)
替代方式。
$s = 't\est\\\\\\\\\\\\stri\\\\\"\\\\\'\\\\0\\\\ng';
$s = preg_replace('~\\\\+~', '\\', $s);
$s = str_replace(array('\\"', '\\\'', '\\0'), array('"', '\'', "\0"), $s);
答案 3 :(得分:1)
试试这些:
preg_replace("/\\+(['\"\0\\])/", "$1", $string);
答案 4 :(得分:0)
stripslashes出了什么问题?它解释了逃避“特殊”字符的斜线并删除了“额外”斜杠。