1

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";}

これを短くできる人はいますか?

4

5 に答える 5

5
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;
于 2012-04-29T14:13:44.187 に答える
1

使用するだけです:

$lang = (file_exists($_GET['lg'] . '.php')) ? $_GET['lg'] . '.php' : 'en.php';
include($lang);

編集:コメントによると、このコードは機能的で簡潔ですが、実際には悪意のある攻撃に対して非常に脆弱であり、基本的に誰でもURL変数を構成またはその他の機密ファイルに設定して、サイトに攻撃を仕掛けることができます。 、またはデータを盗みます。$langしたがって、includeを呼び出す前に、必ず変数を検証してください。

$allowed = array('en.php', 'fr.php');
if(in_array($lang, $allowed)){
    include($lang);
}
于 2012-04-29T14:12:20.580 に答える
1
<?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';
?>
于 2012-04-29T14:14:04.233 に答える
0

2つの言語のみを使用するページがありますが、さらに追加するためにページを開く必要があったため、次のような同じ問題を解決しました。

$allowed=array("da","de","en","es");
$default="de.php";
include(array_search($_GET["lg"],$allowed) === false ? $default : $allowed[array_search($_GET["lg"] , $allowed)].".php");

許可するファイルを指定でき、それらの名前が配列から取得されることを除いて、同様に機能するはずです。したがって、偽の要求から安全である必要があります。

于 2012-04-29T15:46:59.540 に答える
0

このようなものはどうですか?

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');
}
于 2012-04-29T14:17:03.420 に答える