http_build_query param for?

时间:2013-08-17 19:40:10

标签: php get

有人知道如果一个人不在场,http_build_query会在开头添加?吗?

现在我正在添加index.php?到我的所有链接。我有理由不想要吗?硬编码到链接。如果http_build_query只是添加它,如果一个不存在,那将是一个巨大的帮助。

3 个答案:

答案 0 :(得分:1)

http_build_query()不会解析网址,因此无法知道您要将其返回的字符串附加到何处。您可以将?附加到网址(如果它还没有),然后将结果http_build_query()附加到该网址。

示例:

$params = http_build_query(...);
if (strrpos($url, '?') !== strlen($url) - 1) {
    // if the value in $url does not end with a ?, append one
    $url .= '?';
}
$url .= $params;

答案 1 :(得分:0)

如果$url包含您要追加查询字符串的部分,$qhttp_build_query的结果,那么一行将是:

$url2 = strpos($url, '?')?$url.'&'.$q:$url.'?'.$q;

对于这种一般情况,当然假设$ url是有效的,现有的查询字符串是URL编码的。

一些测试代码:

$url = 'http://google.com';
$params = array('q'=>'something', 'q2'=>'something else');
$q = http_build_query($params);
$url2 = strpos($url, '?')?$url.'&'.$q:$url.'?'.$q;
echo 'Original url: ', $url, PHP_EOL, 'Final url: ', $url2, PHP_EOL;
$url = 'http://google.com/?extra=som';
$url2 = strpos($url, '?')?$url.'&'.$q:$url.'?'.$q;
echo 'Original url: ', $url, PHP_EOL, 'Final url: ', $url2, PHP_EOL;

和输出:

Original url: http://google.com
Final url: http://google.com?q=something&q2=something+else
Original url: http://google.com/?extra=som
Final url: http://google.com/?extra=som&q=something&q2=something+else

答案 2 :(得分:0)

<?php 
$parse_url = parse_url($url);
$url2 = $parse_url['scheme'] . '://' . $parse_url['host'] . $parse_url['path'] . '?' . ($parse_url['query'] ? $parse_url['query'] . '&' : '') . http_build_query($params);

?>
相关问题