我最近一直在开发一个多语种的网站。我有一个小问题。
每次单击按钮时,语言变量都需要更改。我使用锚标记(即<a href="?lang=En">English</a>
)来做到这一点。
除了语言之外的其他变量被添加到URL时,问题就出现了。我想重定向页面而不删除其他变量,只是更改lang变量。因此,如果网址包含"var1=value&var2=value&lang=En"
,我想更改lang变量并保持原样。 lang变量可以有3个值:En
,Az
,Ru
。
到目前为止我尝试的方法:
function URI_ADD_AZ(){
$URI = $_SERVER['REQUEST_URI'];
if(isset($_GET['lang'])){
$lang = $_GET['lang'];
unset($lang);
}
$new_URI = $URI . '?lang=Az';
return $new_URI;
}
<a href="<?php URI_ADD_AZ?>">Azeri</a>
问题:
每次点击按钮时,lang变量都会被添加到未更改的网址中
/?lang=Az?lang=Az?lang=Az?lang=Az
如何确保不会重复并避免重定向循环?
答案 0 :(得分:1)
问题中发布的URI_ADD_AZ
函数不会覆盖或删除查询字符串中预先存在的lang=*
,因此重复&#34; langs&#34;在URL中。此外,根据查询字符串中key = value对的位置,无法处理?
或&
的要求。
这里,为了简化和限制工作字符串并因此可能引入错误,将拉取$ _SERVER var QUERY_STRING,而不是整个REQUEST_URI,然后将PHP_SELF添加到HREF值之前。
这里首先要删除包含lang=*
的{{1}},具体取决于它的位置。仅当在字符串的开头找到匹配时,才使用条件引用来删除尾随&
。
从$ _GET var中检索下一个$ lang并进行验证。如果有一个有效的$ lang,它会附加到查询字符串中,并考虑是否需要&
。
最后,如果不为空,则生成的查询字符串前面带有&
并返回。
?
答案 1 :(得分:0)
只需提供完整网址: -
<a href="http://yourwebsite.com/<?php URI_ADD_AZ(); ?>">Azeri</a>
或者,如果你想在没有重新加载页面的情况下这样做,你将不得不使用&#34; jquery.history.js&#34;文件。 https://github.com/browserstate/history.js
History.pushState(null, 'title of my website', "?lang=<?php URI_ADD_AZ(); ?>);
由于