Php 如何确保一个参数";“朗”;是否始终存在于url中而不将其添加到所有链接?
我有一个简单的多语言网站。所显示页面的语言由会话变量的使用控制,但我希望用户能够复制url并将其发送给其他人,最终到达同一语言页面——也就是说,我希望url中始终存在“lang”url参数Php 如何确保一个参数";“朗”;是否始终存在于url中而不将其添加到所有链接?,php,parameters,session-variables,Php,Parameters,Session Variables,我有一个简单的多语言网站。所显示页面的语言由会话变量的使用控制,但我希望用户能够复制url并将其发送给其他人,最终到达同一语言页面——也就是说,我希望url中始终存在“lang”url参数 我当然可以编辑页面上的所有链接并将其添加到其中,但是没有更简单的方法吗?是否有其他解决方案?也许您可以尝试以下方法: <?php //get full url $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; /
我当然可以编辑页面上的所有链接并将其添加到其中,但是没有更简单的方法吗?是否有其他解决方案?也许您可以尝试以下方法:
<?php
//get full url
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//check if get lang exists.
if(isset($_GET['lang'])){
if($_GET['lang'] == "en"){
//then do nothing.
} else{
//get all parameters.
$query_arr = $_GET;
//chang lang parameter.
$query_arr["lang"] = "en";
$query = http_build_query($query_arr);
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
//make first part of url.
$first_url = 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0];
//redirect to correct url.
header("location: " . $first_url . "?" . $query);
}
}else{
//redirect to correct url.
header("location: " . $url . "&lang=en");
}
?>
希望这是你的意思。也许你可以试试这个:
<?php
//get full url
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//check if get lang exists.
if(isset($_GET['lang'])){
if($_GET['lang'] == "en"){
//then do nothing.
} else{
//get all parameters.
$query_arr = $_GET;
//chang lang parameter.
$query_arr["lang"] = "en";
$query = http_build_query($query_arr);
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
//make first part of url.
$first_url = 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0];
//redirect to correct url.
header("location: " . $first_url . "?" . $query);
}
}else{
//redirect to correct url.
header("location: " . $url . "&lang=en");
}
?>
希望这是您的意思。您可以使用以下内容:
<?php
session_start();
if(isset($_SESSION['lang'])){
$sessionLang = $_SESSION['lang'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$rUri = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(!(isset($_GET['lang']))){
if (strpos($rUri, '?')) { // returns false if '?' isn't there
$newUrl = "$rUri&$sessionLang";
header("Location: $newUrl");
} else {
$newUrl = "$rUri?$sessionLang";
header("Location: $newUrl");
}
}
}
您可以使用以下内容:
<?php
session_start();
if(isset($_SESSION['lang'])){
$sessionLang = $_SESSION['lang'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$rUri = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if(!(isset($_GET['lang']))){
if (strpos($rUri, '?')) { // returns false if '?' isn't there
$newUrl = "$rUri&$sessionLang";
header("Location: $newUrl");
} else {
$newUrl = "$rUri?$sessionLang";
header("Location: $newUrl");
}
}
}
一种方法是使用HTML5历史API在加载页面时自动在URL中添加参数。但这也有缺点,如果用户直接右键单击链接并复制它,那么参数就不存在了。另一个不受此影响的解决方案是使用不同的子域而不是参数-假设您的链接中不包含域名,这也会使其正常工作。亲爱的@CherryDT,HTML5历史API将有助于实现这一目的。如果你有时间,最好写一个答案。你的问题标题与内容不匹配。让我看看我是否明白了。。。用户语言设置为ex:$\u SESSION['lang']
,您希望将该值添加到所有URL,例如:www.somesite.com/script.php?lang=pt
,lang
不需要是en
,它可以是pt
,对吗?@pedrobito Yes:)这是正确的。我更改了标题,这样就不会混淆。好的,明白了,请检查我的答案。一种方法是使用HTML5历史API在加载页面时自动在URL中添加参数。但这也有缺点,如果用户直接右键单击链接并复制它,那么参数就不存在了。另一个不受此影响的解决方案是使用不同的子域而不是参数-假设您的链接中不包含域名,这也会使其正常工作。亲爱的@CherryDT,HTML5历史API将有助于实现这一目的。如果你有时间,最好写一个答案。你的问题标题与内容不匹配。让我看看我是否明白了。。。用户语言设置为ex:$\u SESSION['lang']
,您希望将该值添加到所有URL,例如:www.somesite.com/script.php?lang=pt
,lang
不需要是en
,它可以是pt
,对吗?@pedrobito Yes:)这是正确的。我更改了标题,这样就不会混淆。好的,明白了,请检查我的答案。谢谢,你能用一些注释解释一下这是如何工作的吗?添加了一些注释。谢谢,你能用一些注释解释一下这是如何工作的吗?添加了一些注释。