2016-11-30 2 views
0

シナリオ: - ログインに成功すると、前のページにリダイレクトされます。 login.phpは、ユーザ名とパスワード、POSTをlogin_check.phpに転送する形式です。 login_check.phpは、ユーザーの認証を確認し、ユーザーに選択肢がない限り、ユーザーがデフォルトのページにリダイレクトされます(例:people's.php)。 .phpはログインしていないことを確認し、ログインに成功した後に戻れるようにログインページにリダイレクトします)。認証チェックの後、私は、ユーザーの選択肢がそれ以外があるかどうかをチェックし、login_check.phpURLにhtmlエンティティがある場合、URLは自動的にデコードされますか?

echo '<input type="hidden" name="location" value="'; 
if(isset($_GET['location'])) 
{ 
    echo htmlspecialchars($_GET['location']); 
} 
echo '"/>'; 

- :私もlogin.phpでフォームの隠しフィールドに訪問したURLを格納していますページをデフォルトに彼をリダイレクトします -

//REDIRECT USER TO PREVIOUS PAGE IF ANY 
if(isset($_POST['location'])) 
{ 
    header("location:".$_POST['location']); 
    exit; 
} 

私の質問: - 私はブラウザにURI people's.phpを記述する場合、それはプロムそれに応じてログインしてください。ログイン後に私にリダイレクトされます。人物&amp; s.phpページが見つからないというメッセージが表示されます(htmlspecialchars()を使用したエンコードされたURLは、上記のコード)。だから、URLのデコードがどこで行われ、なぜ他の方法で動作しないのですか(例:people&amplsqu; s.php)?

答えて

0

HTMLエンティティを(内在CDATAを持つ要素の内部にはなく、<script>のように)HTMLドキュメントに書き込むと、エンティティはHTMLが解析されてDOMが生成されるときにデコードされます。

これは、お客様の<input value=...の例で発生します。

フォームが送信されたときにフォームからの入力からURLを構成すると、エンティティはすでにデコードされています。


あなたがそのようなlocationとして(HTTPヘッダーでHTMLエンティティを入れると、それがブラウザによって復号化されることはありません。HTTPヘッダはそれほどHTMLとして解析されることはありませんHTML文書ではありません。

あなたの例では、エンティティはすでに$_POSTを移入するためにサーバーに送信される前に、ブラウザによって復号化された。


あなたは、ブラウザのアドレスバーにHTMLエンティティを入れると、それがブラウザによって復号化されることはありませんURLはHTML文書はHTMLとして解析されません。

+0

&lsquo;バックをデコードする

header("location:".htmlspecialchars_decode($_POST['location'])); 

:PHPあなたはこれを使用することができます – rosemary

-1

私の意見では、エンコードする必要がある文字をファイルに付けるべきではありません。

ファイルlogin_check。ありがとうございました‘

関連する問題