Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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多语言获取参数_Php_Multilingual_Getparameter - Fatal编程技术网

PHP多语言获取参数

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参数,只有在设置语言时,

我正在为PHP页面构建多语言支持。假设我有一个页面url:

http://mypage.php?user=eric&city=newyork

在将get参数保留在url中的同时,在get参数lang=enlang=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.='?';}