【问题标题】:Add a parameter to all links - the ? and & so as to no broken links向所有链接添加一个参数 - ?和 & 以免链接断开
【发布时间】:2021-10-09 15:30:33
【问题描述】:

我们需要为我们网站(附属)的一些链接添加一个参数。比如说 parameter=x 只有一个问题: 如果在链接上未检测到问号 (?) 并在检测到时添加 &parameter=x 是否足以添加 ?parameter=x 以便所有链接仍然有效吗?

我的意思是我们不希望在添加参数后使任何功能链接断开。链接数量巨大,我们无法逐个测试。

在任何情况下都可能存在,使链接断开,在添加参数时应该考虑到这一点? 这些链接是 seo 友好的,但它们仍然有自己的参数,具有相同的逻辑 (?/ &)。

【问题讨论】:

  • https://example.com/something#fragment 会打破您能够将参数附加到任意链接的假设。您应该解析链接,将参数插入查询部分(如果为空则创建它)并重新构建 URL。
  • @NiettheDarkAbsol 你对 PHP 函数有什么建议吗?
  • parse_url() 开始。请参阅该文档链接上的 cmets 以获取“unparse-url”来重建它。

标签: php html url parameters hyperlink


【解决方案1】:

这是一个代码示例,它从数组中解析链接并更新特定的查询参数,并将新结果推送到保持链接顺序的新数组。

如果存在端口、用户或密码字段,这将失败,因为我们不会从字符串中解析它们。但是,如果您有这样的案例,您可以轻松添加它们。

演示:https://replit.com/@kallefrombosnia/urls#main.php

$new = [];

foreach($urls as $key => $url){

    // Get query and host of url
    $query = parse_url($url, PHP_URL_QUERY);
    $host = parse_url($url, PHP_URL_HOST);
    $scheme = parse_url($url, PHP_URL_SCHEME);
    $path = parse_url($url, PHP_URL_PATH);
    $fragment = parse_url($url, PHP_URL_FRAGMENT);


    // Parse string 
    parse_str($query, $parts);

    // Do your logic here with $parts and change specific parts
    // Example change first parameters to crodocile
    $parts['parameter'] = 'crodocile';

    $changed = $parts;

    $newquery = http_build_query($changed);

    $new[] = implode('', [$scheme, '://' , $host, $path, '?', $newquery, $fragment ? "#".$fragment : '']);

}

var_dump($new);

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2018-04-21
    • 2012-08-13
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多