如何使用php从字符串中获取所需的数据

时间:2016-09-18 15:07:52

标签: php regex

otpauth:// TOTP /保管箱:myemail@gmail.com秘密= MYSECRETCODE&安培;发行人=收存箱

otpauth://totp/myemail@google.com秘密= MYSECRETCODE

otpauth://totp/github.com/MyUsername发行者= GitHub的&安培;秘密= MySecret

我需要变量中的密码,电子邮件,发卡行,标签。我用爆炸编码,但不能用第三个编码。有没有简单的方法来使用正则表达式获取信息?

    $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;
        }

1 个答案:

答案 0 :(得分:1)

您可以使用http://php.net/manual/en/function.parse-url.php解析URI,然后使用explode查询键值对解析URI。这比使用正则表达式更正确。

试试这个:

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