URL中取消设置变量会产生错误

时间:2014-06-23 13:31:22

标签: php

我最近一直在开发一个多语种的网站。我有一个小问题。 每次单击按钮时,语言变量都需要更改。我使用锚标记(即<a href="?lang=En">English</a>)来做到这一点。

除了语言之外的其他变量被添加到URL时,问题就出现了。我想重定向页面而不删除其他变量,只是更改lang变量。因此,如果网址包含"var1=value&var2=value&lang=En",我想更改lang变量并保持原样。 lang变量可以有3个值:EnAzRu

到目前为止我尝试的方法:

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

如何确保不会重复并避免重定向循环?

2 个答案:

答案 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(); ?>);

由于