$_GET
この問題についてはすでに質問がありますが、所属とヘッダー機能についてさらに質問があります。
私は多言語サイトを持っています。存在しないページを呼び出す場合は、ルートディレクトリ内.htaccess
を参照します。404.php
は次の.htaccess
ようになります。
ErrorDocument 404 /404.php
ルート方向では、 or404.php
によって設定されているデフォルト言語を調べて、言語サブディレクトリを参照します。SESSION
COOKIE
/language/404.php
ルート404.php
は次のようになります。
include_once "scripts/pref_language.php";
if (isset ($_GET['uri']) ){
$get = $_GET['uri'];
header("Location: /$pref_language/404.php?uri=$get");
exit;
}
$url = urlencode($_SERVER['REQUEST_URI']);
header("Location: /$pref_language/404.php?uri=$url");
言語サブディレクトリを参照すると、投稿URL
は次のようになり、パラメーターuri
はまだ異なります。
http://www.example.com/english/404.php?uri=somedata
または別の言語で:
http://www.example.com/german/404.php?uri=somedata
のコードは/english/404.php
次のようになります。
<?php
error_reporting(E_ALL);
ob_start();
session_start();
header ("Content-Type: text/html; charset=utf-8");
include_once "../scripts/db_connect.php";
include_once "../scripts/functions.php";
include_once "../scripts/browser_identification.php";
include_once "../scripts/pref_language.php";
...some text variables in its specific language
include_once "../templates/template_404.php";
?>
テンプレートは HTML のスタイリングです。に含まれるフッターtemplate_404.php
は、データを送信するための主なアトラクションです。そのフッターには、言語設定を変更し、言語パスを切り替えるオプションがあります。フォームが送信されるSESSION
とCOOKIE
、 が変更され、ページがヘッダー関数を開始します。
フッターのコードは次のとおりです。
if (isset($_GET['uri']) ) {
$uri = urlencode($_GET['uri']);
echo "TEST URI: $uri";
}
...
$basename = basename($_SERVER['SCRIPT_NAME'], ".php");
if ($basename === "index") {
$form_action = rtrim($_SERVER['PHP_SELF'], 'index.php');
} else{
$form_action = htmlentities($_SERVER['PHP_SELF']);
}
...
if ( isset($_POST['pref_lang']) ) {
$content = $_POST['pref_lang'];
if ($content === "german") {
if ($basename === "about") {
$basename = "info";
} else if ($basename === "contact") {
$basename = "kontakt";
}
}
$_SESSION['pref_language'] = $_POST['pref_lang'];
setcookie('pref_language', '', time()- 999999, '/', '.example.de' );
setcookie('pref_language', $content, time()+60*60*24*365, '/', '.example.de');
if ($basename === "404"){
header("Location: ../$content/404.php?uri=$uri");
} else {
header("Location: ../$content/$basename");
}
}
?>
<div id="data">
<fieldset>
<ul>
<li>
<form action="<?php echo $form_action;?>" method="post">
<input type="submit" id="german" name="pref_lang" value="german"/><label for="german">german</label>
</form>
</li>
</ul>
</fieldset>
</div>
問題は、ページにURL
ofがある場合
http://www.example.com/**english**/404.php?uri=somedata
$_POST
そして、私は言語をドイツ語に変更するために提出します:
http://www.example.com/**german**/404.php?uri=somedata
たとえば$_GET['uri']
、空になり、URL
次のようになります。
http://www.example.com/**german**/404.php?uri=
ヘッダー関数を開始した後。uri
ヘッダーの代わりにその行をエコーアウトしようとしましたが、定義されていないメッセージを受け取ります。
Undefined variable: uri in /customers/7/4/1/example.com/httpd.www/scripts/footer_en.php on line 102
Location: ../english/404.php?uri=
それについての奇妙なことは、送信する前にページを呼び出して$_POST
サイトのソースコードを見ると、変数$uri
はパラメーターを正しく読み取る$_GET
が、後でヘッダー関数で機能しなくなることです。問題は、なぜそれがうまくいかないのかということです。
ですから、誰かがこの問題を取得するために何をすべきか教えてくれたらうれしいです. 本当に感謝します。
どうもありがとう。
アップデート:
$_GET
パラメータをに保存しようとしましたSESSION
が、フォームを投稿して他の言語のサイトにリダイレクトされると、の内容SESSION
が間違っているよう$_GET
です. htmlの頭のようなcss/colorbox.css
現時点では、をそれに設定してこれを取得しようとしform action
ています:
...
if ($basename === "index") {
$form_action = rtrim($_SERVER['PHP_SELF'], 'index.php');
}
if ($basename === "404") {
$form_action = "";
}
if ($basename !== "index" AND $basename !== "404") {
$form_action = htmlentities($_SERVER['PHP_SELF']);
}
...
<li>
<form action="<?php echo $form_action. ( (isset($_GET['uri']) ) ? "/english/?uri=".urlencode($_GET['uri']) : "" );?>" method="post">
<input type="submit" id="english" name="pref_lang" value="en"/><label for="en">englisch</label>
</form>
</li>