向所有链接添加一个参数 - ?和 & 以免链接断开

Posted

技术标签:

【中文标题】向所有链接添加一个参数 - ?和 & 以免链接断开【英文标题】: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”来重建它。 【参考方案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);

【讨论】:

以上是关于向所有链接添加一个参数 - ?和 & 以免链接断开的主要内容,如果未能解决你的问题,请参考以下文章

向 href 链接添加参数

配置/覆盖 Piranha CMS html 编辑器,以免将 &nbsp's 添加到 html

向 NetSuite PDF 发票添加超链接?

使用 jQuery 向链接添加参数

在 Visual Studio 中向解决方案添加额外的链接器输入依赖项

robots笔记以免忘记