在PHP中用另一个符号替换反斜杠

在PHP中用另一个符号替换反斜杠,php,regex,replace,get,backslash,Php,Regex,Replace,Get,Backslash,一直在努力用另一个符号(如“.-”)替换反斜杠。只是为了指示反斜杠的位置,因为我无法通过url作为GET变量发送字符串(如“C\xampp\etc”),所以我想首先用另一个符号替换该字符串中的反斜杠,然后通过url发送,然后将它们替换回处理它的PHP文件中的反斜杠。不过,有没有更好的方法通过url发送这样的字符串?因为当我尝试以下脚本时: $tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']); 它变成了一

一直在努力用另一个符号(如“.-”)替换反斜杠。只是为了指示反斜杠的位置,因为我无法通过url作为GET变量发送字符串(如“C\xampp\etc”),所以我想首先用另一个符号替换该字符串中的反斜杠,然后通过url发送,然后将它们替换回处理它的PHP文件中的反斜杠。不过,有没有更好的方法通过url发送这样的字符串?因为当我尝试以下脚本时:

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);
它变成了一个php错误,因为\也用作分隔符

有人能帮我吗

提前谢谢


顺便说一句,如果我能够通过url发送一个完整的数组,整个问题都会解决,但我认为这是不可能的?

preg\u replace中使用的正则表达式应该包含在一对分隔符中,并尝试使用
\\\
而不是
\
,如下所示:

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

要反转替换,可以执行以下操作:

$str = preg_replace('{\.-\.}',"\\",$str);
您需要转义
以匹配文字点。

使用
urlencode()
/
urldecode()

顺便说一句:这听起来像是一个巨大的安全漏洞(通过请求发送绝对路径)



PS:
preg\u replace()
用于正则表达式。下次请尝试使用
str\u replace()

如果您没有使用正则表达式(您没有),则应使用
str\u replace

$tmp_name = str_replace('\\', '.-.', $_FILES['...']);
请注意,您必须使用另一个
\
来转义
\
(否则它将转义以下

至于分隔符错误-正则表达式需要包含在delimeters中,例如
/foo/
/
是分隔符,
foo
是模式)。但是,同样,您不需要使用或担心regexp

顺便说一句,如果我能够通过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库)

Update:我如何扭转这种局面?
url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server