3

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

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

结果变成了一个php错误,因为\也被用作分隔符..

谁能帮我解决这个问题?

提前致谢!

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

4

4 回答 4

4

preg_replace 中使用的正则表达式应包含在一对分隔符中,并且还尝试使用\\\而不是\as:

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

编辑:

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

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

您需要转义.以匹配文字点。

于 2010-03-20T10:30:26.143 回答
4

使用urlencode()/ urldecode()

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

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


PS:preg_replace()适用于正则表达式。str_replace()下次试试。

于 2010-03-20T10:40:37.960 回答
1

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

于 2010-03-20T10:52:59.350 回答
0

如果你没有使用正则表达式(你没有),你应该使用str_replace

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

请注意,您必须\与另一个一起转义\(否则它会转义以下内容')。

至于分隔符错误 - 正则表达式需要用分隔符括起来,例如/foo//是分隔符,foo是模式)。但是,同样,您无需使用或担心正则表达式

于 2010-03-20T10:41:35.590 回答