【问题标题】:Why does a browser concatenate the href when I set it dynamically?为什么我动态设置时浏览器会连接href?
【发布时间】:2020-07-20 22:57:49
【问题描述】:

我正在开发一种语言切换器,我使用 PHP 将 URL 从一种语言更改为另一种语言。我希望语言切换按钮(即链接)在页面加载时更改其 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 替换 '#' 吗?谢谢

【问题讨论】:

  • 如果这是一个 JavaScript 问题,您应该分享生成的 JavaScript 代码,而不是 PHP 源代码。但我看不出.href = 'blah' 可能如何连接。您是否验证了您的 PHP 变量包含的内容?
  • 可以,但没有协议 localhost/website.com/en/ 是从当前文件夹开始的相对路径
  • 你为什么在这里使用 JavaScript?只需echo "&lt;a href='".%new_link."'&gt;Language&lt;/a&gt;"
  • @Bergi 因为我是新手。很好的建议,谢谢!

标签: php html href


【解决方案1】:

$_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>
";

【讨论】:

  • 或者,从链接中删除 $_SERVER['HTTP_HOST'] 并将其设为绝对路径
  • 是的,我只是猜想有一个理由让主持人进来,但公平点
猜你喜欢
  • 2020-11-29
  • 2017-05-20
  • 2015-05-14
  • 1970-01-01
  • 2020-03-16
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多