【问题标题】:Replacing backslash with another symbol in PHP用PHP中的另一个符号替换反斜杠
【发布时间】:2011-01-29 18:30:57
【问题描述】:

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

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

原来是一个php错误,因为\也被用作分隔符..

谁能帮我解决这个问题?

提前致谢!

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

【问题讨论】:

    标签: php regex replace get backslash


    【解决方案1】:

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

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

    编辑:

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

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

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

    【讨论】:

    • 更新:我将如何扭转这种局面?
    【解决方案2】:

    使用urlencode()/urldecode()

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

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


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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        请注意,您必须使用另一个\ 转义\(否则它会转义以下')。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 2011-11-23
          • 1970-01-01
          • 1970-01-01
          • 2020-01-17
          • 2018-02-27
          • 1970-01-01
          相关资源
          最近更新 更多