在php中用双反斜杠替换单个反斜杠

时间:2013-04-13 03:10:57

标签: php backslash

我在PHP编程中遇到了一个奇怪的问题。使用backtrace函数获取PHP编译器正在使用的最后一个文件。它会给我使用反斜杠的路径。我想将这个字符串存储在数据库中,但MySQL会删除它们;我假设它以为我想逃避它们。

因此C:\Path\To\Filename.php会在数据库中以C:PathToFileName.php结尾。当我向谷歌发布这个问题时,我发现很多其他人遇到了同样的问题,但是在很多不同的情况下。人们总是提出类似的建议:

$str = '\dada\dadda';
var_dump(str_replace('\', '\\', $str)); 

这样做的问题是,即使你把它放到某种循环中,你只需要用\替换第一个\\。所以它从\开始,然后\\\然后\\\\\然后\\\\\\\然后\\\\\\\\\等...直到它用这个巨大的字符串填充内存缓冲区。

我对此问题的解决方案,如果有其他人拥有它:

//$file = C:\Path\To\Filename.php

//Need to use \\ so it ends up being \
$fileArray = explode("\\", $file);

//take the first one off the array
$file = array_shift($fileArray);

//go thru the rest of the array and add \\\\ then the next folder
foreach($fileArray as $folder){
    $file .= "\\\\" . $folder;
}

echo $file
//This will give you C:\\Path\\To\\Filename.php

因此,当它存储在数据库中时,它将显示为C:\Path\To\Filename.php

如果其他人有更好的解决方案,我会全力以赴。

4 个答案:

答案 0 :(得分:1)

你需要在preg_replace参数内“双重转义”它们(一次用于字符串,一次用于正则表达式引擎):

$mystring = 'c:\windows\system32\drivers\etc\hosts';
$escaped = preg_replace('/\\\\/','\\\\\\\\',$mystring);

echo "New string is:  $escaped\n";

或者只有一次使用str_replace

 $newstring = str_replace('\\','\\\\',$mystring);

 echo "str_replace : $newstring\n";
?>

答案 1 :(得分:0)

mysql_real_escape_string('C:\Path\To\Filename.php');

答案 2 :(得分:0)

您可以使用正则表达式捕获组():

echo preg_replace('/([\\\])/', '${1}${1}', "\b is a metasequence");
// 3 backslahses

// outputs: \\b is a metasequence

答案 3 :(得分:-1)

愚蠢但对我有用。

$BS='\\\';

(您在$ BS中加了一个双反斜杠,但实际上只有一个反斜杠。

$FullName = "C:".$BS.$BS."Path".$BS."To".$BS."FileName.php";


您应该获得$ FullName“ C:\\ Path \ To \ Filename.php”