簡體   English   中英

較短的語言檢測

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM