$ _SERVER ['REQUEST_URI']和$ _SERVER ['PHP_SELF']的功能

时间:2011-08-25 06:35:40

标签: php

我使用标题中包含的这个简单模块让用户更改网站的语言

 <div class="left first">
   <a href="' . $_SERVER['REQUEST_URI'] . $linkParam . 'sv">
    <img src="bilder/sv.png" alt="SV" />
   </a>
</div>


<div class="left"><img src="bilder/eng.png" alt="ENG" /></div>

可用于更改的语言是通过http请求发送lang param的链接,从而设置语言会话。在我总是向用户发送index.php之前,我希望能够在整个网站上更改语言并留在页面上。

由于某些页面需要保留http参数,我使用此解决方案来确定lang参数应该是?lang=...还是&lang=...

if($_SERVER['REQUEST_URI'] != $_SERVER['PHP_SELF']){

            $linkParam = '&lang=';

        }else{

            $linkParam = '?lang=';

        }

通过一些测试可以正常运行,但这是否会一直用于确定网址是否已?param并设置lang-param

2 个答案:

答案 0 :(得分:1)

看看http_build_query功能,也许这会对你有帮助。您可以执行以下操作:

$aGet = $_GET;
$aGet['lang'] = $sLanguage;
$sQueryString = http_build_query($aGet);

答案 1 :(得分:0)

最好使用:

if(strpos($_SERVER['REQUEST_URI'], '?') !== false)
    $linkParam = '&lang=';
else
    $linkParam = '?lang=';

实际上甚至更好:

if($_SERVER['QUERY_STRING'])
    $linkParam = '&lang=';
else
    $linkParam = '?lang=';

PHP_SELF可以通过.htaccess文件更改,而REQUEST_URI保持不变。因此,如果您甚至开始使用mod_rewrite,它可能会停止工作。我认为QUERY_STRING也比cross-server更加REQUEST_URI