将查询字符串附加到URL

时间:2012-09-17 23:47:23

标签: php javascript query-string

  

“添加一个已包含在上一个网址中的附件的网址?”   这是最混乱的标题 - 我知道。但我想不出更好的解释方法。

以下示例可能会有所帮助。

我有网址1:http://example.com/?value=xyz&stuff=abc

如果有人点击了页面中的链接,我可以传递附加值吗?

ie:http://www.example.org/?value=xyz&stuff=abc

感谢并抱歉这样的菜鸟。

3 个答案:

答案 0 :(得分:6)

您询问的这些附件是URI的实际所谓的查询部分:

<scheme>://<authority><path>?<query>

  foo://example.com:8042/over/there?name=ferret#nose
  \_/   \______________/\_________/ \_________/ \__/
   |           |            |            |        |
scheme     authority       path        query   fragment
  

取自: 3。语法组件(RFC 3986)http://tools.ietf.org/html/rfc3986#page-16

然后,您需要一个辅助函数,将(可选)<query>附加到现有<scheme>://<authority><path>部分。我忽略了这个例子的<fragment>,因为它需要在最后添加,我想留下一些作为练习:

function href_append_query($href)
{
    $query = isset($_SERVER['QUERY_STRING'])
        ? '?' . $_SERVER['QUERY_STRING']
        : ''
    ;

    $query = strtr(
        $query, [
            '"' => '&quot;',
            "'" => '&#39;',
            '&' => '&amp;'
        ]
    );

    return $href . $query;
}

它的用法:

<a href="<?=href_append_query('http://step2.com/')?>Some link</a>

这个小函数将确保可以通过$_SERVERDocs获得的exisitng QUERY_STRING被编码为HTML输出。

答案 1 :(得分:3)

如果使用PHP构建链接,只需将原始查询字符串附加到它们:

<a href="http://step2.com/?<?php echo $_SERVER['QUERY_STRING']; ?>">Some link</a>

在JavaScript中,只需将window.location.search的值附加到“传递”查询字符串所需的所有链接。

答案 2 :(得分:0)

您还可以使用js / jquery将现有查询字符串附加到页面上的每个链接:

 $(function() {
    $('a').each(function() {
      link = $(this).attr('href');
      query = window.location.search;
      if (link.indexOf('?') !== -1 && query !== '') {
        query = query.replace('?','&');
      }
      $(this).attr('href',link+query);
    });
  });