替换 PHP 中特定 URL 参数的值
Replace value of specific URL param in PHP
我有一个 Facebook link 字符串:
"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"
// ]
如果您的字符串实际上是 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']
,无论哪种方式,您都应该清理输入:
也许一些正则表达式替代?
$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);
考虑这个输入字符串:
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%[^%]+/
这个模式(简单来说)说:
- 匹配“&redirect_uri=”
- 匹配任何非白色字符一次或多次(尽快停止)
- 匹配"localhost"
- 重新启动 "full string match" (
\K
)
- 匹配“%”
- 匹配一个或多个非 % 字符
我有一个 Facebook link 字符串:
"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"
// ]
如果您的字符串实际上是 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']
,无论哪种方式,您都应该清理输入:
也许一些正则表达式替代?
$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);
考虑这个输入字符串:
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%[^%]+/
这个模式(简单来说)说:
- 匹配“&redirect_uri=”
- 匹配任何非白色字符一次或多次(尽快停止)
- 匹配"localhost"
- 重新启动 "full string match" (
\K
) - 匹配“%”
- 匹配一个或多个非 % 字符