2016-09-18 5 views
0

otpauth使用して、文字列から必要なデータを取り出すことができますか?[email protected]を秘密= MYSECRETCODE &発行者= Dropboxのは、どのように私はPHP

otpauth://totp/[email protected] ?秘密= MYSECRETCODE

otpauth:?//totp/github.com/MyUsername発行者= GitHubの&秘密= MySecret

私は秘密のコード、電子メール、発行者、変数にラベルを必要としています。私は爆発を使用してコード化しており、それは第3のものではありません。正規表現を使用して情報を取得する簡単な方法はありますか?

$data = $request['code']; 
    $remove_rules = substr($data, 15);  

    $que_exp = explode('?',$remove_rules); 

    if(array_key_exists(1,$que_exp)) 
    { 
    if (filter_var($que_exp[0], FILTER_VALIDATE_EMAIL)) { 
     $email = $que_exp[0]; 
    } 
    } 

    $secret_exp = explode('&',$que_exp[1]); 
    $secret = substr($secret_exp[0], strpos($secret_exp[0], "=") + 1);  

    if(array_key_exists(1,$secret_exp)) 
    { 
    $issuer = substr($secret_exp[1], strpos($secret_exp[1], "=") + 1); 
    } 

    $label_email = explode(':',$que_exp[0]); 

    if (!filter_var($label_email[0], FILTER_VALIDATE_EMAIL)) { 
     if (!filter_var($label_email[1], FILTER_VALIDATE_EMAIL)) { 
      return 'data error'; 
     } 
     $email = $label_email[1]; 
     $label = $label_email[0]; 
    } 
    else 
        $email = $label_email[0]; 

    if(empty($issuer)) { 
     if(empty($label)) 
       $issuer = "Account"; 
      else 
     $issuer = $label; 
     } 
+0

はこれを試してみてください。 $ _REQUEST ['secret']はあなたの変数を持っているはずです...おそらく、あなたはparse_url関数を一番上手く見る必要がありますか?例えば; var_dump(parse_url($ url)); –

+0

私はLaravelを使用しています。 $ _REQUEST ['secret']には、 のような値が含まれています。otpauth:// totp/Dropbox:[email protected]?secret = MYSECRETCODE&issuer = Dropbox –

答えて

1

クエリのキーと値のペアをhttp://php.net/manual/en/function.parse-url.phpを使用してURIを解析し、explodeことができます。これは、正規表現を使用するよりも正しいでしょう。私はあなたが何をしているかを理解するとは思わない

print_r(parse_url('otpauth://totp/github.com/MyUsername?issuer=GitHub&secret=MySecret'));