我的字符串中有双反斜杠'\',需要将其转换为单个反斜杠'\'。我已经尝试了几种组合,当我使用echo或更多的反斜杠被意外地添加到字符串时,整个字符串消失了。这个正则表达式让我变得疯狂......哈哈......
我在其他失败的尝试中试过这个:
$pattern = '[\\]';
$replacement = '/\/';
?>
<td width="100%"> <?php echo preg_replace($pattern, $replacement,$q[$i]);?></td>
如果这是一个愚蠢的问题我很抱歉,我很感激任何指示。
答案 0 :(得分:7)
使用stripslashes()
- 它完全符合您的要求。
<td width="100%"> <?php echo stripslashes($q[$i]);?></td>
答案 1 :(得分:2)
使用stripslashes代替。此外,在正则表达式中,您正在搜索单个反斜杠,并且您的替换是不正确的。 \\{2}
应该搜索双反斜杠,而\
应该用单个替换它们,尽管我没有对此进行测试。
进一步解释,模式[\\]
匹配由单个反斜杠组成的集合中的任何字符。在php中,您还应该使用正斜杠来划分正则表达式:/[\\]/
您的替换(无分隔符)\
不是用于匹配单个反斜杠的正则表达式。匹配单个反斜杠的正则表达式为\\
。注意逃避。这就是说,替换术语必须是一个字符串,而不是一个正则表达式(反向引用除外)。
编辑:Sven在下面声称,stripslashes删除所有反斜杠。这根本不是真的,我将在下面解释原因。
如果一个字符串包含2个反斜杠,则第一个反斜杠将被视为转义反斜杠并将被删除。这可以在http://www.phpfiddle.org/main/code/3yn-2ut看到。任何反斜杠本身都存在的事实与striplashes删除所有反斜杠的说法相矛盾。
为了澄清,这个字符串声明无效:$x = "\";
,因为反斜杠会转义第二个引号。此字符串"\\"
包含一个反斜杠。在取消引用此字符串的过程中,将删除此反斜杠。此"\\\\"
字符串包含两个反斜杠。在取消引用时,第一个将被视为逃避反斜杠,并将被删除。
答案 2 :(得分:2)
使用preg_replace将双反斜杠转换为单反斜杠:
preg_replace('/\\\\{2}/', '\\', $str)
\
需要转发两次,一次转发string
,regex
转一次,就像CodeAngry说的那样。string
只会将其展开一次。有意义吗?
答案 3 :(得分:1)
如果您要查找的字符串是常量,请不要使用正则表达式,就像“每个双反斜杠的实例”一样。
使用str_replace()
执行此任务。这是一个非常简单的函数,用一个字符串替换另一个字符串。
在您的情况下:str_replace('\\\\', '\\', $var)
。
双反斜杠实际上转换为四个反斜杠,因为在任何引号(单引号或双引号)中,单个反斜杠是后续字符的转义序列的开始。如果你想要一个字面反斜杠,你必须写两个。你想要两个反斜杠,你必须写下四个反斜杠。
我不喜欢stripslashes()
的建议。这当然会将你的双反斜杠“解码”为一个反斜杠。但它也会删除整个字符串中的所有单个反斜杠。如果没有 - 罚款,否则现在就会失败。
答案 4 :(得分:0)
$pattern = '[\\]'; // wrong
$pattern = '[\\\\]'; // right
<\ n> \ t \ escape \ as \\和\ n \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
答案 5 :(得分:-2)
使用htmlentities函数将斜杠转换为html实体,然后使用str_replace或preg_match将其更改为新实体