0

URL にクエリ文字列を追加したいのですが、URL の形式が予測できません。URLは次のとおりです。

  • http://example.com/page/->http://example.com/page/?myquery=string
  • http://example.com/page->http://example.com/page?myquery=string
  • http://example.com?p=page->http://example.com?p=page&myquery=string

これらは私が考えている URL ですが、私が認識していない他の形式がある可能性があります。

これを行うための標準、ライブラリ、または一般的な方法があるかどうか疑問に思っています。私はPHPを使用しています。

編集: Cbroe の説明と通行人のコードを使用しています。Hamza による別の関数がありますが、PHP 関数を使用し、よりクリーンで短いコードを使用する方がよいと思います。

4

4 に答える 4

3
function addQuery($url,array $query)
{
    $cache=parse_url($url,PHP_URL_QUERY);
    if(empty($cache)) return $url."?".http_build_query($query);
    else return $url."&".http_build_query($query);
}

// test
$test=array("http://example.com/page/","http://example.com/page","http://example.com/?p=page");
print_r(array_map(function($v){
    return addQuery($v,array("myquery"=>"string"));
},$test));

ライブデモ

于 2013-04-15T11:28:43.253 に答える
1

これを行うための標準、ライブラリ、または一般的な方法があるかどうか疑問に思っています。私はPHPを使用しています。

どの程度フェールセーフにするかによって異なりますが、それによってより複雑になります。

?最も簡単な方法は、URL にがあるかどうかを調べることです。ある場合は append &myquery=string、そうでない場合は append?myquery=stringです。これは、標準に準拠した URL のほとんどのケースをうまくカバーするはずです。

もっと複雑にしたい場合は、 と を使用して URL を分解しparse_url、値を含むparse_strキーを2 番目の関数が返す配列に追加してから、新しいクエリ文字列部分に を使用してすべてを元に戻すことができます。myquerystringhttp_build_query

于 2013-04-15T11:24:28.133 に答える
1

いくつかのスパゲッティ コード:

echo addToUrl('http://example.com/page/','myquery', 'string').'<br>';
echo addToUrl('http://example.com/page','myquery', 'string').'<br>';
echo addToUrl('http://example.com/page/wut/?aaa=2','myquery', 'string').'<br>';
echo addToUrl('http://example.com?p=page','myquery', 'string');

function addToUrl($url, $var, $val){
    $array = parse_url($url);
    if(isset($array['query'])){
        parse_str($array['query'], $values);
    }
    $values[$var] = $val;
    unset($array['query']);

    $options = '';$c = count($values) - 1;
    $i=0;
    foreach($values as $k => $v){
        if($i == $c){
            $options .= $k.'='.$v;
        }else{
            $options .= $k.'='.$v.'&';
        }
        $i++;
    }

    $return = $array['scheme'].'://'.$array['host'].(isset($array['path']) ? $array['path']: '') . '?' . $options;
    return $return;
}

結果:

http://example.com/page/?myquery=string
http://example.com/page?myquery=string
http://example.com/page/wut/?aaa=2&myquery=string
http://example.com?p=page&myquery=string
于 2013-04-15T11:41:58.893 に答える
0

関数を試してみてhttp_build_query()ください。それがあなたが探しているものだと思いますparse_str()

于 2013-04-15T11:24:58.233 に答える