我想改变这个:
// use appropiate lang.xx.php file according to the value of the $lang
switch ($_SESSION['lang']) {
case 'en':
$lang_file = 'lang.en.php';
break;
case 'es':
$lang_file = 'lang.es.php';
break;
case 'zh-tw':
$lang_file = 'lang.zh-tw.php';
break;
case 'zh-cn':
$lang_file = 'lang.zh-cn.php';
break;
default:
$lang_file = 'lang.en.php';
}
这样的事情:
//include file for final output
include_once 'languages/lang.'.$_SESSION['lang'].'php;
(如果我执行上面的include-final-output-thing,我认为$lang_file
变量会变得多余)
这样我就可以跳过整个switch
部分。我尝试过其他组合,但它们似乎不起作用。有什么建议吗?
答案 0 :(得分:17)
你可以这样做:
switch ($_SESSION['lang']) {
case 'en':
case 'es':
case 'zh-tw':
case 'zh-cn':
$lang_file = 'lang.'.$_SESSION['lang'].'.php';
break;
default:
$lang_file = 'lang.en.php';
}
或者您使用数组并使用in_array
查看值是否在数组中:
$languages = array('en', 'es', 'zh-tw', 'zh-cn');
if (in_array($_SESSION['lang'], $languages)) {
$lang_file = 'lang.'.$_SESSION['lang'].'.php';
} else {
$lang_file = 'lang.en.php';
}
你甚至可以在两种情况下省略en
,因为它是默认值。
答案 1 :(得分:2)
$lang_file = 'lang.' . ($_SESSION['lang']) . 'php';
if(!file_exists($lang_file))
{
$lang_file = 'lang.en.php';
}
虽然不能防止注射。但是,它允许您在不修改代码的情况下添加新的语言代码。
答案 2 :(得分:2)
或者:
$allowed = array('en', 'es', 'zh-tw', 'zh-cn');
$lang_file = (in_array($_SESSION['lang'], $allowed))
? 'lang.'.$_SESSION['lang'].'.php' : 'lang.en.php';
答案 3 :(得分:0)
这将完美无缺
$lang_file_tmp = 'lang.' . $_SESSION['lang'] . '.php';
if ( preg_match( '/^[a-zA-Z\-]{2,5}$/', $_SERSSION['lang'] ) && file_exists( $lang_file_tmp ) ) {
$lang_file = $lang_file_tmp;
} else {
$lang_file = 'lang.en.php';
}
通过这种方式,您无需在每次添加新语言时编辑代码,也无需担心安全问题。