Замена одиночной обратной косой черты двойной обратной косой чертой в php

Я столкнулся с какой-то странной проблемой в своем программировании на PHP. Используя функцию backtrace для получения последнего файла, с которым работал компилятор PHP. Это даст мне путь, используя обратную косую черту. Я хотел сохранить эту строку в базе данных, но MySQL удалит их; Я предполагаю, что думал, что я хочу сбежать от них.

Таким образом, C:\Path\To\Filename.php закончит C:PathToFileName.php в базе данных. Когда я отправил этот вопрос в Google, я нашел много других с той же проблемой, но во многих разных ситуациях. Люди всегда предлагали что-то вроде:

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

Проблемы с этим, даже если вы помещаете его в какую-то петлю, заключается в том, что вы просто заменяете первый \ на \\ . Итак, он начинается с \ then \\\ then \\\\\ then \\\\\ then \\\\\ т. Д. … Пока он не заполнит буфер памяти этой огромной строкой.

Мое решение этой проблемы, если у кого-то еще есть:

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

Если у кого-то еще есть лучшее решение, я все уши.

Solutions Collecting From Web of "Замена одиночной обратной косой черты двойной обратной косой чертой в php"

Вам нужно «удвоить escape» их внутри параметров preg_replace (один раз для строки, один раз для механизма regex):

 $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"; ?> 
 mysql_real_escape_string('C:\Path\To\Filename.php');