【问题标题】:How to remove escaped forward slash using php?如何使用 php 删除转义的正斜杠?
【发布时间】:2014-02-21 18:32:38
【问题描述】:

我正在使用 Google Drive API,我获得的 refresh_token 有一个转义的正斜杠。虽然这应该是有效的 JSON,但调用 refreshToken() 时 API 不会接受它。我正在尝试使用preg_replace 删除反斜杠:

$access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
$access_token = preg_replace('/\\\//', '/', $access_token);

我希望返回的字符串是:

"1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";

我尝试了各种表达式,但它要么不删除反斜杠,要么返回一个空字符串。请注意,我不想删除所有反斜杠,只删除那些转义正斜杠的。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    避免使用正则表达式,只使用str_replace:

    $access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
    $access_token = str_replace( '\/', '/', $access_token );
    //=> 1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8
    

    【讨论】:

    • 谢谢!非常接近 - 我想保留 /,所以 str_replace( '\/', '/', $s );
    • @svenyonson:是的,我后来更新了代码,使用上面的最新代码。
    【解决方案2】:

    嗯,有一个标准函数可以做到这一点:stripslashes

    所以请避免使用正则表达式、str_replace 等。

    就是这么简单:

    $access_token = stripslashes($access_token);
    

    【讨论】:

      【解决方案3】:

      您可以使用不同的分隔符。这里我选择使用~作为分隔符,而不是/

      $access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
      $access_token = preg_replace('~\\\/~', '/', $access_token);
      
      print $access_token;
      

      这会返回:

      1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8
      

      【讨论】:

      • 这个答案在技术上是正确的,但我个人认为preg_replace() 对于这样一个简单的任务来说太过分了。
      【解决方案4】:
      <?php
      $access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
      echo str_replace("\\","",$access_token);
      ?>
      

      输出:

      1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8

      【讨论】:

        【解决方案5】:

        这对你有用:

        $access_token = preg_replace('|\\\\|', '', $access_token);
        

        【讨论】:

          【解决方案6】:

          1\\/Mg\otw\\\/Btow 这样的字符串会发生什么?

          如果您的字符串使用双引号内插转义,那么简单的 find \/ replace / 将不起作用。

          您必须将其用于特定的 non-\ 转义字符:'~(?&lt;!\\\)((?:\\\\\\\)*)\\\(/)~'

          查找 - (?&lt;!\\)((?:\\\\)*)\\(/)
          替换 - $1$2

          【讨论】:

            【解决方案7】:

            这对我有用(使用负前瞻):

            $pattern = "/(?!\/)[\w\s]+/"
            preg_match($pattern, $this->name,$matches)
            $this->name = $matches[0]
            

            之前的名字: WOLVERINE WORLD INC /DE/

            名称后: WOLVERINE WORLD INC DE

            【讨论】:

              猜你喜欢
              • 2013-08-09
              • 1970-01-01
              • 2012-07-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-02
              • 2016-06-16
              相关资源
              最近更新 更多