一直在努力用另一个符号替换反斜杠,例如'.-。'只是为了指示反斜杠的位置,因为我无法发送诸如'C \ xampp \ etc'之类的字符串。通过url作为GET变量,所以我想我首先用另一个符号替换该字符串中的反斜杠,然后通过url发送,然后将它们替换回处理它的PHP文件中的反斜杠。虽然有更好的方法通过URL发送这样的字符串吗?因为当我尝试脚本如:
$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);
结果是一个php错误,因为\也用作分隔符..
有人可以帮我解决这个问题吗?
提前致谢!
顺便说一句,如果我能通过网址发送一个完整的数组,整个问题就会解决,但我认为这不可能吗?
答案 0 :(得分:4)
preg_replace中使用的正则表达式应该包含在一对分隔符中,并尝试使用\\\
而不是\
作为:
$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);
修改强>
要反转您可以执行的替换:
$str = preg_replace('{\.-\.}',"\\",$str);
您需要转义.
以匹配文字点。
答案 1 :(得分:3)
使用urlencode()
/ urldecode()
。
echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc
顺便说一句:这听起来像是一个巨大的安全漏洞(按要求发送绝对路径)
PS:preg_replace()
用于正则表达式。下次尝试str_replace()
。
答案 2 :(得分:1)
顺便说一句,如果我能通过网址发送一个完整的数组,整个问题就会解决,但我认为这不可能吗?
这很容易。 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库)
答案 3 :(得分:0)
如果你没有使用正则表达式(你不是),你应该使用str_replace
代替:
$tmp_name = str_replace('\\', '.-.', $_FILES['...']);
请注意,您必须使用另一个\
转义\
(否则它将逃脱以下'
)。
至于分隔符错误 - 正则表达式需要包含在分隔符中,例如/foo/
(/
是分隔符,foo
是模式)。但是,再一次,您无需使用或担心正则表达式