PHP多语言获取参数
我正在为PHP页面构建多语言支持。假设我有一个页面url:PHP多语言获取参数,php,multilingual,getparameter,Php,Multilingual,Getparameter,我正在为PHP页面构建多语言支持。假设我有一个页面url: http://mypage.php?user=eric&city=newyork 在将get参数保留在url中的同时,在get参数lang=en和lang=es之间切换的常见解决方案是什么?一个有用的脚本,返回当前页面的相对url和当前的“get数据” 修改它并相应地连接语言参数一个有用的脚本,返回当前页面的相对URL和当前的“获取数据” 修改它并相应地连接语言参数您不会一直在url中保留GET参数,只有在设置语言时,
http://mypage.php?user=eric&city=newyork
在将get参数保留在url中的同时,在get参数lang=en和lang=es之间切换的常见解决方案是什么?一个有用的脚本,返回当前页面的相对url和当前的“get数据”
修改它并相应地连接语言参数一个有用的脚本,返回当前页面的相对URL和当前的“获取数据”
修改它并相应地连接语言参数您不会一直在url中保留GET参数,只有在设置语言时,您才会使用会话来记住当前客户端使用的语言 在php中创建以下函数
function getCurrentLanguage()
{
if(isset($_REQUEST['lang']))
{
//Validate that $_REQUEST['lang'] is valid
return $_SESSION['lang'] = $_REQUEST['lang'];
}
if(isset($_SESSION['lang']))
{
return $_SESSION['lang'];
}
return 'en'; //Default
}
现在,当用户访问站点时,默认语言是英语,但是如果他导航到
index.php?lang=es
,那么该语言将设置为es,因此当他在没有?lang=es
的情况下在站点周围导航时,它将显示西班牙语版本。您不会始终在url中保留GET参数,只有在设置语言时,才能使用会话来记住当前客户端使用的语言
在php中创建以下函数
function getCurrentLanguage()
{
if(isset($_REQUEST['lang']))
{
//Validate that $_REQUEST['lang'] is valid
return $_SESSION['lang'] = $_REQUEST['lang'];
}
if(isset($_SESSION['lang']))
{
return $_SESSION['lang'];
}
return 'en'; //Default
}
现在,当用户访问该站点时,默认语言将是英语,但如果他导航到
index.php?lang=es
,则该语言将设置为es,因此,当他在没有?lang=es
的情况下浏览网站时,网站会显示西班牙语版本。最好使用cookie或会话/id数据来存储此类信息。
我带的东西会少一些 最好使用cookie或会话/id数据来存储此类信息。
我带的东西会少一些 如果我正确理解了这个问题,您需要一种向URL添加参数的方法,或者在URL已经存在的情况下用新值替换它的值 这里有一个函数可以在所有URL中安全地执行此操作:
function url_with_parameter($url, $name, $value) {
if(strpos($url, '?') === false) {
if (strpos($url, '#') === false) {
// No query and no fragment -- append a new query to the url
$newurl = $url.'?'.$name.'='.$value;
}
else {
// No query with fragment -- insert query before existing fragment
$newurl = str_replace('#', '?'.$name.'='.$value.'#', $url);
}
}
else {
if (strpos($url, $name.'=') === false) {
// With query, param does not exist -- insert at beginning of query
$newurl = str_replace('?', '?'.$name.'='.$value.'&', $url);
}
else {
// With query, param exists -- replace it
$parsed = parse_url($url, PHP_URL_QUERY);
parse_str($parsed, $vars);
$newurl = str_replace($name.'='.$vars[$name], $name.'='.$value, $url);
}
}
return $newurl;
}
在使用此函数的输出创建链接之前,请记住调用
urlencode
。如果我正确理解了这个问题,您需要一种方法将参数添加到URL,或者如果URL已经存在,则用新值替换其值
这里有一个函数可以在所有URL中安全地执行此操作:
function url_with_parameter($url, $name, $value) {
if(strpos($url, '?') === false) {
if (strpos($url, '#') === false) {
// No query and no fragment -- append a new query to the url
$newurl = $url.'?'.$name.'='.$value;
}
else {
// No query with fragment -- insert query before existing fragment
$newurl = str_replace('#', '?'.$name.'='.$value.'#', $url);
}
}
else {
if (strpos($url, $name.'=') === false) {
// With query, param does not exist -- insert at beginning of query
$newurl = str_replace('?', '?'.$name.'='.$value.'&', $url);
}
else {
// With query, param exists -- replace it
$parsed = parse_url($url, PHP_URL_QUERY);
parse_str($parsed, $vars);
$newurl = str_replace($name.'='.$vars[$name], $name.'='.$value, $url);
}
}
return $newurl;
}
在使用此函数的输出创建链接之前,请记住调用
urlencode
。嗯,我想是这样的。。。如果不是像维基百科或engwell这样的计划,我想是的。。。如果不计划Labe<代码> E.维基百科.org < /COD>或Eng感谢罗伯特,如果IM在搜索的中间(我在页面中有一个使用GET参数的搜索栏),我想切换语言,但仍然将搜索CyrETEA放在URL??=)中,那么您将在该语言的表单中放置一个下拉框,例如…
,然后语言将随搜索一起发送,如果在生成任何内容之前调用上述函数,则可以。getCurrentLanguage()
将始终返回该用户最后一次已知的设置语言,如果用户从未选择语言,则默认为en
,一旦您通过了“lang=xx”,您就不需要再次通过它,当该用户在站点上时,它会记住。另外,您可以使用cookie并将到期期限设置为1年。谢谢罗伯特,如果IM在搜索的中间(我在页面中有一个使用get参数的搜索栏),并且我想切换语言,但仍然将搜索CyrETEA放在URL??=)中,那么您将在该语言的表单中放置一个下拉框,例如…
,然后语言将随搜索一起发送,如果在生成任何内容之前调用上述函数,则可以。getCurrentLanguage()
将始终返回该用户最后一次已知的设置语言,如果用户从未选择语言,则默认为en
,一旦您通过了“lang=xx”,您就不需要再次通过它,当该用户在站点上时,它会记住。或者,您可以使用cookie并将过期期限设置为1年。如果您打算使用此方法,那么在调用函数之前,您可以执行isset($\u GET['lang'])$_获取['lang']:'en'
,当您调用函数时,它会自动将其附加到url。这是一个非常好的函数,它确实帮了我很多。我在返回之前添加了以下内容,这样我就可以使用它而不必担心是否有获取参数:if($I!=0){$currentURL.='&'}else{$currentURL.='?';}如果要使用此方法,那么在调用函数之前,可以执行isset($\u get['lang'))$_获取['lang']:'en'
,当您调用函数时,它会自动将其附加到url。这是一个非常好的函数,它确实帮了我很多。我在返回之前添加了以下内容,这样我就可以使用它,而不必担心是否获得了参数:if($I!=0){$currentURL.='&';}else{$currentURL.='?';}