为什么当我动态设置 href 时浏览器会连接它?

Why does a browser concatenate the href when I set it dynamically?

我正在开发语言切换器,我使用 PHP 将 URL 从一种语言更改为另一种语言。我希望语言切换按钮(即 link)在页面加载时更改其 href 属性。这是我的代码:

<?php

$actual_link = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

if (strpos($actual_link, 'fr') !== false) {
    $actual_lang = 'fr';
    $new_link = str_replace('/fr/','/en/',$actual_link);
}
else {
    $actual_lang = 'en';
    $new_link = str_replace('/en/','/fr/',$actual_link);
}

echo "

<div class='top-bar'>
    <a class='language-selector' id='language-switch-btn' href='#'>Language</a>
</div>

<script type='text/javascript'>
    document.getElementById('language-switch-btn').href = '".$new_link."';
</script>

";
?>

但是,我的问题是 JS 代码将 $new_link 连接到 $actual_link,导致这样的 href 属性:localhost/website.com/fr/localhost/website.com/en/ 当我希望它只是 localhost/website.com/en/

知道为什么它不将“#”替换为 $newlink 吗?谢谢

$_SERVER['HTTP_HOST'] 不包含 协议 ,没有协议链接是相对的。

您可以在 href 前加上 // 以允许任何 http 协议(http 或 https),但如评论中所述,您也不需要 JS 来执行此操作。

echo "
<div class='top-bar'>
  <a class='language-selector'
     id='language-switch-btn'
     href='//".$new_link."'>Language</a>
</div>
";