如何将 GET 值的参数限制为数组中的参数?
How can I limit the parameters of the GET values to the ones in my array?
我已经设置了一个简单的多语言支持的基本脚本。
我的问题是,如果用户在 url 上手动键入他自己的 GET 参数,则会显示错误(当然,因为它不会正确地引导到任何地方)。例如,我已经为 'en' 和 'el' 设置了一个数组,但是如果用户手动输入 'de' 因为这种语言不在我的数组中,它将导致一个未定义索引的错误页面。我想使用默认语言将用户重定向到 index.php。
这是我的index.php
<?php
include('lang.php');
set_lang();
$current = $_SESSION['lang_ses'];
?>
<html>
<body>
<div style="height:100px; background-color:red; color:black;">
<a href="index.php?lang=en">ENG</a>
<a href="index.php?lang=el">EL</a>
</div>
<div style="height:400px; background-color:gray; color:white;">
<h2><?php echo $langarray[$current]['service1']; ?></h2>
<h2><?php echo $langarray[$current]['service2']; ?></h2>
<h2><?php echo $langarray[$current]['service3']; ?></h2>
</div>
</body>
</html>
这是我的脚本lang.php
<?php
function set_lang() {
session_start(); // Starting php session
$default = 'en'; // Here you can set with which language the website should start.
if(!isset($_SESSION['lang_ses'])) { // Setting up chosen language or load default language
if(isset($_COOKIE['lang'])) {
$_SESSION['lang_ses'] = $_COOKIE['lang'];
} else {
$_SESSION['lang_ses'] = $default;
}
}
if(isset($_GET['lang'])) {
$_SESSION['lang_ses']=$_GET['lang'];
setcookie('lang',$_GET['lang'],time()+24*3600); // writing cookie
}
}
$langarray = array(
'en'=>array(
'service1'=>'Health',
'service2'=>'Beauty',
'service3'=>'Strength'
),
'el'=>array(
'service1'=>'Υγεία',
'service2'=>'Ομορφιά',
'service3'=>'Δύναμη'
)
);
?>
检查 "lang.php" 文件中的条件如下
$Arr_languages=array("en","el");
if (!(in_array($_GET['lang'],$Arr_languages))
header('Location: index.php');exit;
else {
//your process;
}
if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7
header('Location: /index.php');
}
另一种方法是在 运行 set_lang()
函数之前在脚本顶部为 $_SESSION['lang_ses']
设置默认值。
$_SESSION['lang_ses'] = "en";
set_lang();
在你的函数中使用这样的比较
if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7
$defaultLangCode = $_SESSION['lang_ses'];
} else {
$defaultLangCode = $_GET['lang'];
}
...使用 $defaultLangCode
继续您的脚本,这样就不需要重定向。 my.site/de
您的英语页面将使用默认语言。
我已经设置了一个简单的多语言支持的基本脚本。 我的问题是,如果用户在 url 上手动键入他自己的 GET 参数,则会显示错误(当然,因为它不会正确地引导到任何地方)。例如,我已经为 'en' 和 'el' 设置了一个数组,但是如果用户手动输入 'de' 因为这种语言不在我的数组中,它将导致一个未定义索引的错误页面。我想使用默认语言将用户重定向到 index.php。
这是我的index.php
<?php
include('lang.php');
set_lang();
$current = $_SESSION['lang_ses'];
?>
<html>
<body>
<div style="height:100px; background-color:red; color:black;">
<a href="index.php?lang=en">ENG</a>
<a href="index.php?lang=el">EL</a>
</div>
<div style="height:400px; background-color:gray; color:white;">
<h2><?php echo $langarray[$current]['service1']; ?></h2>
<h2><?php echo $langarray[$current]['service2']; ?></h2>
<h2><?php echo $langarray[$current]['service3']; ?></h2>
</div>
</body>
</html>
这是我的脚本lang.php
<?php
function set_lang() {
session_start(); // Starting php session
$default = 'en'; // Here you can set with which language the website should start.
if(!isset($_SESSION['lang_ses'])) { // Setting up chosen language or load default language
if(isset($_COOKIE['lang'])) {
$_SESSION['lang_ses'] = $_COOKIE['lang'];
} else {
$_SESSION['lang_ses'] = $default;
}
}
if(isset($_GET['lang'])) {
$_SESSION['lang_ses']=$_GET['lang'];
setcookie('lang',$_GET['lang'],time()+24*3600); // writing cookie
}
}
$langarray = array(
'en'=>array(
'service1'=>'Health',
'service2'=>'Beauty',
'service3'=>'Strength'
),
'el'=>array(
'service1'=>'Υγεία',
'service2'=>'Ομορφιά',
'service3'=>'Δύναμη'
)
);
?>
检查 "lang.php" 文件中的条件如下
$Arr_languages=array("en","el");
if (!(in_array($_GET['lang'],$Arr_languages))
header('Location: index.php');exit;
else {
//your process;
}
if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7
header('Location: /index.php');
}
另一种方法是在 运行 set_lang()
函数之前在脚本顶部为 $_SESSION['lang_ses']
设置默认值。
$_SESSION['lang_ses'] = "en";
set_lang();
在你的函数中使用这样的比较
if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7
$defaultLangCode = $_SESSION['lang_ses'];
} else {
$defaultLangCode = $_GET['lang'];
}
...使用 $defaultLangCode
继续您的脚本,这样就不需要重定向。 my.site/de
您的英语页面将使用默认语言。