in PHP

2016-03-29 11 views
0

Ich habe eine Facebook-Link string:in PHP

"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" 

Ich möchte ersetzen:

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

zu

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


Ich würde so etwas tun, wenn es die Browser-URL ist, aber es ist eine Zeichenfolge in einem Anker-Tag.

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

Wie mache ich so etwas?


Ich habe versucht

$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" 
// ] 

Antwort

2

Vielleicht einige regex Ersatz?

$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); 
1

Wenn Ihr String tatsächlich ist redirect_uri=http%3A%2F%2Flocalhost%3A8888 dann dies zu tun:

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

Diese die Zeichenfolge sucht und die gewünschten Änderungen vornehmen, dann wieder speichern zur $url Variable.

Offensichtlich könnten Sie $_GET['redirect_uri'], so oder so verwenden Sie die Eingabe sanieren sollte:

Filter Input

Filters - Sanitise

Siehe auch: http://php.net/manual/en/function.str-replace.php

+0

die 'redirect_uri' nicht alway' = http% 3A% 2F% 2Floc alhost% 3A8888'. Es tut mir Leid. Ich habe meinen Beitrag aktualisiert. – ihue

+0

Mein genaues ** Ziel ** zu ersetzen ''redirect_uri = http% 3A% 2F% 2F ---- alles ---'' mit ''redirect_uri = http% 3A% 2F% 2Flocalhost'' – ihue

+0

Also, wenn die Domain URI war 'http% 3A% 2F% 2Fdomain.com/foo' Sie möchten, dass es durch' http% 3A% 2F% 2Flocalhost/foo' ersetzt wird? – Adam

1

In Anbetracht dieser Eingabestring:

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 

können Sie diese flexible regex verwenden Muster mit einem leeren Ersatz string:

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

Replacement Demo Link

Dieses Muster (in einfachen Begriffen) sagt:

  • match "& redirect_uri ="
  • Spiel jeden nicht-Weiß-Zeichen ein oder mehr Male
  • match "localhost"
  • Neustart des "full String Match" (\K (so schnell wie möglich zu stoppen))
  • match "%"
  • Spiel eines oder mehr nicht-% Zeichen