0

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

所以C:\Path\To\Filename.php最终会C:PathToFileName.php在数据库中。当我将这个问题发布到谷歌时,我发现许多其他人有同样的问题,但在许多不同的情况下。人们总是提出类似的建议:

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

这样做的问题是,即使您将其放入某种循环中,您也只是不断将第一个替换\\\. 所以它开始像\then \\\then \\\\\then etc... 直到它\\\\\\\\\\\\\\\\这个巨大的字符串填充内存缓冲区。

如果其他人有,我对这个问题的解决方案是:

//$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

4 回答 4

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";
?>
于 2013-04-13T03:34:47.923 回答
0
mysql_real_escape_string('C:\Path\To\Filename.php');
于 2013-04-13T03:28:18.057 回答
0

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

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

// outputs: \\b is a metasequence
于 2019-02-19T11:01:04.687 回答
0

愚蠢但对我有用。

$BS='\\\';

(你在 $BS 中放了一个双反斜杠,但实际上你只得到一个反斜杠。

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


你应该得到 $FullName "C:\\Path\To\Filename.php"

于 2019-12-27T04:29:09.640 回答