【问题标题】:Replace value of specific URL param in PHP替换 PHP 中特定 URL 参数的值
【发布时间】:2016-03-29 19:27:28
【问题描述】:

我有一个 Facebook 链接字符串:

"https://www.facebook.com/v2.5/dialog/oauth?client_id=*****&state=*****&response_type=code&sdk=php-sdk-5.1.2&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2Ffacebook%2Flink&scope=email%2Cuser_birthday%2Cuser_photos"

我要替换:

redirect_uri=http%3A%2F%2Flocalhost%3A8888

redirect_uri=http%3A%2F%2Flocalhost


如果是浏览器 URL,我会这样做,但它是锚标记内的字符串。

if (isset($_GET['redirect_uri'])) {
    echo $_GET['redirect_uri'];
}else{
    // Fallback behaviour goes here
}

我该怎么做这样的事情?


我试过了

$permissions = 'user_birthday,user_photos';
$login_url = $fb->getLoginUrl(['email','scope'=>$permissions]);
$urls = explode("&", $login_url);
$redirect_uri = explode("=", $urls[4]);
$link = explode("%2F", $redirect_uri[1]);

dd($link);

// array:5 [▼
//   0 => "http%3A"
//   1 => ""
//   2 => "localhost%3A8888" // I want to replace this string with 'localhost'
//   3 => "facebook"
//   4 => "link"
// ]

【问题讨论】:

    标签: php url substring str-replace


    【解决方案1】:

    也许一些正则表达式替换?

    $url = 'https://www.facebook.com/v2.5/dialog/oauth?client_id=*****&state=*****&response_type=code&sdk=php-sdk-5.1.2&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2Ffacebook%2Flink&scope=email%2Cuser_birthday%2Cuser_photos';
    
    $pattern = '/redirect_uri=http\%3A\%2F\%2F[\%0-9A-Za-z]+facebook/';
    $replace = 'redirect_uri=http%3A%2F%2Flocalhost%2Ffacebook';
    $newURl = preg_replace($pattern, $replace, $url);
    

    【讨论】:

      【解决方案2】:

      如果你的字符串实际上是redirect_uri=http%3A%2F%2Flocalhost%3A8888,那么这样做:

      $url = $_GET['redirect_uri'];
      $url = str_replace('redirect_uri=http%3A%2F%2Flocalhost%3A8888', 'redirect_uri=http%3A%2F%2Flocalhost', $url);
      

      这将搜索字符串并进行所需的更改,然后将其保存回$url 变量。

      显然,您可以使用$_GET['redirect_uri'],无论哪种方式您都应该清理输入:

      Filter Input

      Filters - Sanitise

      另见:http://php.net/manual/en/function.str-replace.php

      【讨论】:

      • redirect_uri 并不总是 = http%3A%2F%2Flocalhost%3A8888 。对不起。我更新了我的帖子。
      • 我的确切目标'redirect_uri=http%3A%2F%2F----anything---'替换为'redirect_uri=http%3A%2F%2Flocalhost'
      • 因此,如果域 URI 是 http%3A%2F%2Fdomain.com/foo,您是否希望将其替换为 http%3A%2F%2Flocalhost/foo
      • http%3A%2F%2Flocalhost/foo ,它是一个字符串。这不是 URL 参数。
      • 看看这个:stackoverflow.com/questions/176284/… 可能会让你开始,你需要 str_replace 和我认为的一些描述的正则表达式
      【解决方案3】:

      考虑这个输入字符串:

      https://www.facebook.com/v2.5/dialog/oauth?client_id=*****&state=*****&response_type=code&sdk=php-sdk-5.1.2&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2Ffacebook%2Flink&scope=email%2Cuser_birthday%2Cuser_photos
      

      您可以将这种灵活的正则表达式模式与空替换字符串一起使用:

      /&redirect_uri=\S+?localhost\K%[^%]+/
      

      Replacement Demo Link

      这个模式(简单来说)说:

      • 匹配“&redirect_uri="
      • 匹配任何非白色字符一次或多次(尽快停止)
      • 匹配“本地主机”
      • 重启“全字符串匹配”(\K)
      • 匹配“%”
      • 匹配一个或多个非%字符

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 2022-01-11
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2013-12-30
        • 1970-01-01
        相关资源
        最近更新 更多