Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用href切换语言_Php_Html_Url - Fatal编程技术网

Php 使用href切换语言

Php 使用href切换语言,php,html,url,Php,Html,Url,我有三种语言在我的网站上运行,并希望有工作按钮切换语言在我的页面底部。问题是,主页(index.php)需要后缀?lang=X,而其他页面(index.php?contact,index.php?about等)需要URL中的后缀&lang=X 我的a href设置如下: <?php if((isSet($_GET['about']) == true && empty($_GET['about']) == true) || (isSet($_GET['contact']) =

我有三种语言在我的网站上运行,并希望有工作按钮切换语言在我的页面底部。问题是,主页(index.php)需要后缀
?lang=X
,而其他页面(index.php?contact,index.php?about等)需要URL中的后缀
&lang=X

我的a href设置如下:

<?php if((isSet($_GET['about']) == true && empty($_GET['about']) == true) || (isSet($_GET['contact']) == true && empty($_GET['contact']) == true)) { ?>
        <a href="&lang=en"><img src="img/en.gif" alt="English" /> English</a> | <a href="&lang=fr"><img src="img/fr.gif" alt="fran&ccedil;ais" /> fran&ccedil;ais</a> | <a href="&lang=nl"><img src="img/nl.gif" alt="Nederlands" /> Nederlands</a></p>
<?php } else { ?>   
        <a href="?lang=en"><img src="img/en.gif" alt="English" /> English</a> | <a href="?lang=fr"><img src="img/fr.gif" alt="fran&ccedil;ais" /> fran&ccedil;ais</a> | <a href="?lang=nl"><img src="img/nl.gif" alt="Nederlands" /> Nederlands</a></p>
<?php } ?>

||

||

它修复了“?”或“&”的问题,但每当我单击主页以外的页面上的语言更改按钮时,它会将我带到主页,而不是停留在当前页面上,尽管语言切换确实起作用。我想这是由我的.htaccess文件引起的,它将主页改写为void,将联系人和关于页面改写为“/contact”和“/about”


关于如何解决这个问题有什么建议吗?或者如何更轻松地进行语言切换?

您可以读取当前URL中的参数并将新参数附加到其中,如下所示:

$params = array_merge($_GET, array("lang" => "X"));
$new_query_string = http_build_query($params);
但是当从一个页面移动到另一个页面时,使用cookie将有助于不“松动”语言参数。并留下一个更干净的URL

与cookies:

在网站页面的顶部

if ($_GET['lang'])
{
    setcookie("lang", $_GET['lang'], time() + 3600);
}
在您的语言面板集中:

<a href="?lang=X" title="X language">X</a>
<a href="?lang=Y" title="Y language">Y</a>
<a href="?lang=Z" title="Z language">Z</a>

因为OP只需要解决导航问题。这是我要做的

我只需要将当前页面的url

$Url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
然后用导航键点击concat

<a href="<?php echo $Url ?>?lang=en">Home</a>

因此,代码将是

<?php
$Url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>
<a href="<?php echo $Url ?>?lang=en">Home</a>

注意:


我使用
en
作为静态,您可以根据需要动态更改它。

我更喜欢使用烹饪,即,当您单击语言选项时,我将在浏览器中设置cookie。除非用户更改页面,否则它不会被更改,所以我也会得到干净的url。你想让我帮忙吗?它会将所选语言作为cookie存储30天,我如何使用
实现这一点,因此实际的语言切换不是问题,一旦选择了一种语言,它将保持这种方式30天,或者直到选择了另一种语言。出现故障的是切换语言的url。啊,您只能从
$\u-GET
调用,如果Cookie存在,为什么不通过
调用呢?我上面代码中的
$\u-GET
用于分页,而不是语言设置。但是我想我可以使用javascript让
href
在被点击时设置cookie?当设置语言时,它将存储cookie 30天。因此,如果你能找到一种方法,让
href
设置一个cookie,而不是附加到URL,那将是非常感激的。如果这是你正在寻找的答案,请将答案标记为已解决此代码将完全停止链接的工作。由于我的.htaccess文件,例如“contact”页面从
/index.php?contact
更改为
/contact
。因此,当将
?lang=X
附加到URL时,它不起作用。除了主页本身之外,它需要在所有页面上使用“&”。你的意思是,你也可以在你的url中使用“&”
?url显示正确,但当我尝试单击它时,什么也没有发生。你的意思是这样的
/index.php?contact&lang=en
?是的,我更改了它以便添加一个&,url显示的是
localhost/contact&lang=en
,但由于某些原因,我无法单击它。复制链接并将其粘贴到url栏时,它确实起作用。