向所有链接添加一个参数 - ?和 & 以免链接断开
Posted
技术标签:
【中文标题】向所有链接添加一个参数 - ?和 & 以免链接断开【英文标题】:Add a parameter to all links - the ? and & so as to no broken links 【发布时间】:2021-10-09 15:30:33 【问题描述】:我们需要为我们网站(附属)的一些链接添加一个参数。比如说 parameter=x 只有一个问题: 如果在链接上未检测到问号 (?) 并在检测到时添加 ¶meter=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);
【讨论】:
以上是关于向所有链接添加一个参数 - ?和 & 以免链接断开的主要内容,如果未能解决你的问题,请参考以下文章
配置/覆盖 Piranha CMS html 编辑器,以免将  's 添加到 html