【问题标题】:How to set url parameters in an array?如何在数组中设置url参数?
【发布时间】:2009-12-07 18:34:44
【问题描述】:

大家好,我在我的网站上使用 open id 身份验证,在进行身份验证后,我从 openid 提供商(即 yahoo 和 google)获得了一个 url

http://www.mysite.com/openid-login.php?
openid.identity=https://me.yahoo.com/a/1234567&
openid.ax.value.nickname=john&
openid.ax.value.email=john@yahoo.co.in&


http://www.mysite.com/openid-login.php?
openid.identity=https://www.google.com/accounts/o8/1234567&
openid.ext1.value.email=kevin@gmail.com&
openid.ext1.value.country=IN

为了清楚起见,我对网址进行了一些修剪。我想为两者创建一个函数,可以在数组中设置电子邮件(如果存在)、昵称(如果退出)、身份(openid ina)并返回值。例如。

function userdetails(array_get){
......
......
return $userdetails;
}
$userdetails =userdetails($_GET);

$userdetails['nickname'] 会给我昵称(如果存在),类似地用于电子邮件和身份。谢谢

【问题讨论】:

    标签: php arrays function openid


    【解决方案1】:

    我没有创建这个函数,也没有为此获得荣誉。这是从 Simple OpenID 库中提取和修改的。如果有人有链接,请在 cmets 中发布,因为我无权访问原始来源。

    /**
     * Method to filter through $_GET array for requested user information.
     * Will return an array of trimmed userinfo.
     */
    public function filterUserInfo($arr_get) {
        $valid_ax_types = array('nickname' => 1, 'email' => 1, 'fullname' => 1, 'dob' => 1, 'gender' => 1, 'postcode' => 1, 'country' => 1, 'language' => 1, 'timezone' => 1, 'firstname' => 1, 'lastname' => 1);
        $userinfo = array();
        foreach ($arr_get as $key => $value) {
            // trim the key
            $trimmed_key = substr($key, strrpos($key, "_") + 1);
    
            // check for valid openid_ext1 values
            if (stristr($key, 'openid_ext1_value') && isset($value[1])) {
                $userinfo[$trimmed_key] = $value;
            }
    
            // check for valid openid_ax values
            if (stristr($key, 'openid_ax_value') && isset($value[1])) {
                $userinfo[$trimmed_key] = $value;
            }
    
            // check for valid sreg_ values
            else if (stristr($key, 'sreg_') && array_key_exists($trimmed_key, $arr_ax_types)) {
                $userinfo[$trimmed_key] = $value;
            }
        }
        return $userinfo;
    }
    

    【讨论】:

    • 看起来好像您收到的是句点而不是下划线。只需对上面的代码做一些小的修改,改变 'openid_ext1_value''openid_ax_value'
    【解决方案2】:

    我认为“获取 url”实际上是指 URL。接受我下面的答案。 :)

    parse_url()
    parse_str()

    function userdetails( $url, $keep = array( 'email', 'nickname', 'identity' ) ) {
        $array = parse_str( parse_url( $url, PHP_URL_QUERY ) );
    
        $return = array();
        foreach ( $keep as $key ) {
            if ( isset( $array[ $key ] ) ) {
                $return[ $key ] = $array[$key];
            }
        }
    
        return $return;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多