Замена обратной косой черты с помощью другого символа в PHP

Борьба с заменой обратной косой черты другим символом, таким как «.-». просто чтобы указать положение обратных косых черт, поскольку я не мог отправить строку, такую ​​как 'C \ xampp \ etc.' через url как переменную GET, поэтому я решил сначала заменить обратную косую черту в этой строке другим символом, затем отправить URL-адрес, а затем заменить их обратно на обратные косые черты в файле PHP, который его обрабатывает. Хотя был бы лучший способ отправить такие строки через url? Потому что, когда я пробую сценарий, такой как:

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']); 

Он превращается в php-ошибку, так как \ используется как разделитель.

Может ли кто-нибудь помочь мне в этом?

Заранее спасибо!

Кстати, если бы я смог отправить полный массив по URL-адресу, вся эта проблема была бы решена, но я не думаю, что это возможно?

Регулярное выражение, используемое в preg_replace, должно быть заключено в пару разделителя, а также Попробуйте использовать \\\ вместо \ as:

 $tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']); 

РЕДАКТИРОВАТЬ:

Чтобы отменить замену, вы можете:

 $str = preg_replace('{\.-\.}',"\\",$str); 

Вам нужно бежать . чтобы соответствовать буквальной точке.

используйте urlencode() / urldecode() .

 echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc 

BTW: Это звучит как огромный недостаток безопасности (отправка абсолютных путей по запросу)


PS: preg_replace() для регулярных выражений. Попробуйте str_replace() следующий раз.

Кстати, если бы я смог отправить полный массив по URL-адресу, вся эта проблема была бы решена, но я не думаю, что это возможно?

Это легко. PHP:

 $url = 'http://example.com/?array=' . urlencode(serialize($array)); // html $array = unserialize($_GET['array']); // server side 

Или Javascript:

 url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client $array = json_decode($_GET['array']); // server 

(для Javascript вам нужно будет проверить, правильно ли encodeURIComponent, и вам также нужна официальная библиотека JSON)

Если вы не используете регулярное выражение (которого нет у вас), вместо этого вы должны использовать str_replace :

 $tmp_name = str_replace('\\', '.-.', $_FILES['...']); 

Обратите внимание, что вам нужно избежать \ с помощью другого \ (иначе он мог бы избежать следующего).

Что касается ошибки разделителя – регулярные выражения должны быть заключены в разделители, например /foo/ ( / – разделитель, foo – шаблон). Но, опять же, вам не нужно использовать или беспокоиться о регулярных выражениях