我正在为 PHP 页面构建多语言支持。假设我有一个页面网址:
http://mypage.php?user=eric&city=newyork
在获取参数lang=en和lang=es之间切换同时保持获取参数已经在 url 中的常见解决方案是什么?
我正在为 PHP 页面构建多语言支持。假设我有一个页面网址:
http://mypage.php?user=eric&city=newyork
在获取参数lang=en和lang=es之间切换同时保持获取参数已经在 url 中的常见解决方案是什么?
一个有用的脚本,它使用当前的“GET 数据”返回当前页面的相对 URL。
<?php
function getCurrentURL() {
$currentURL = basename($_SERVER["PHP_SELF"]);
$i = 0;
foreach($_GET as $key => $value) {
$i++;
if($i == 1) { $currentURL .= "?"; }
else { $currentURL .= "&"; }
$currentURL .= $key."=".$value;
}
return $currentURL;
}
?>
修改它并相应地连接您的语言参数
您不会始终将 GET 参数保留在 url 中,只有在设置语言时,您才会使用会话来记住当前客户端使用的语言。
在您的 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 或 session/id 数据来存储此类信息。我随身携带的东西会更少。
如果我正确理解了这个问题,您需要一种方法来向 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
在使用此函数的输出建立链接之前调用。