php - 为什么我动态设置时浏览器会连接href?
问题描述
我正在开发一种语言切换器,我使用 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/ 当我希望它只是本地主机/website.com/en/
知道为什么它不会用 $newlink 替换 '#' 吗?谢谢
解决方案
$_SERVER['HTTP_HOST']
不包括协议,并且没有协议链接是相对的。
您可以使用前缀href
with//
以允许任何 http 协议(http 或 https),但如评论中所述,您也不需要 JS 来执行此操作。
echo "
<div class='top-bar'>
<a class='language-selector'
id='language-switch-btn'
href='//".$new_link."'>Language</a>
</div>
";
推荐阅读
- python - 如何遍历时间范围?
- arrays - 如何在c中将文本拆分为二维数组
- angular - 子路由中定义的组件不运行 NgOnInit 生命周期函数
- bash - redmine、puma、nginx 和 crontab
- assembly - 如何通过延迟 MOV 操作 [Assembler x86] 覆盖堆栈?
- c# - 跳跃统一2d时的抖动运动
- javascript - 在链接页面上执行 JavaScript 函数
- python - 更快的多重网格泊位方程求解器?
- javascript - Promise.all 从第一个 promise 存储到变量以在第二个 promise 中使用
- c# - 需要将字符串解析为 mm:ss 而不是 hh:mm