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

时间:2010-03-20 10:26:56

标签: php regex replace get backslash

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

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

结果是一个php错误,因为\也用作分隔符..

有人可以帮我解决这个问题吗?

提前致谢!

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

4 个答案:

答案 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是模式)。但是,再一次,您无需使用或担心正则表达式