[英]A shorter language detection
我需要一種基於URL中的語言包含php文件的方法。 現在,該腳本正在運行,但是當我有10種或20種語言時,我想要某種較短的腳本,它仍然包含相同的信息。 關鍵是,如果URL中的“ lg”更改為不存在的語言,我想使用英語。
$langue=$_GET['lg'];
if ($langue == "da")
{ include"da.php";}
elseif ($langue == "de")
{ include"de.php";}
elseif ($langue == "en")
{ include"en.php";}
elseif ($langue == "es")
{ include"es.php";}
else { include"en.php";}
有人可以縮短這個時間嗎?
if (empty($_GET['lg'])) {
$lang = "en";
} else {
$lang = $_GET['lg'];
}
if ( !preg_match('~^[a-z]{2}$~',$lang) ) {
header('HTTP/1.1 403 Forbidden');
exit;
}
$langfile = "$lang.php";
if (!is_readable($langfile)) {
$lang = "en";
$langfile = 'en.php';
}
include $langfile;
只需使用:
$lang = (file_exists($_GET['lg'] . '.php')) ? $_GET['lg'] . '.php' : 'en.php';
include($lang);
編輯 :根據評論,我應該指出,此代碼雖然功能簡潔,但確實很容易受到惡意攻擊,基本上任何人都可以將URL變量設置為配置或其他敏感文件,然后在您的網站上發起攻擊,或竊取您的數據。 因此,請確保在調用include之前驗證$lang
變量-可能很簡單:
$allowed = array('en.php', 'fr.php');
if(in_array($lang, $allowed)){
include($lang);
}
<?php
$languages = array('da', 'de', 'en', 'es');
$lang = 'en';
if(!empty($_GET['lg']) && array_search($_GET['lg'], $languages) !== false) {
$lang = $_GET['lg'];
}
include $lang.'.php';
?>
那這樣的東西呢?
if(isset($_REQUEST['lg']) && $_REQUEST['lg'] != '') $lg = $_REQUEST['lg'];
if(strstr($lg, '.')) die('Don\'t allow any . in the languages');
if(file_exists('path_to_language_files/'.$lg.'.php') {
include('path_to_language_files/'.$lg.'.php');
} else {
include('path_to_language_files/en.php');
}
我有一個僅使用兩種語言的頁面,但是我需要將其打開以添加更多語言,因此,我解決了類似的問題:
$allowed=array("da","de","en","es");
$default="de.php";
include(array_search($_GET["lg"],$allowed) === false ? $default : $allowed[array_search($_GET["lg"] , $allowed)].".php");
它應該類似地工作,不同之處在於您可以指定允許哪些文件,並且它們的名稱是從數組中獲取的,因此對於虛假請求應該是安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.