0

如果不存在,有谁知道如何在开头http_build_query添加一个??

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

4

3 回答 3

1

http_build_query()不解析 URL,所以它不知道你在哪里附加它返回的字符串。?如果还没有 URL,您可以将其附加到 URL,然后将结果附加到该 URL 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;
于 2013-08-17T19:46:34.797 回答
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);

?>
于 2013-08-18T15:39:10.280 回答
0

if$url包含您要附加​​查询字符串的部分,并且$q是结果,http_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
于 2013-08-17T20:09:30.753 回答