PHP base 64符号化後の暗号化の解決方法
PHPでものを作る時一つの問題を発見しました。文字化けの問題に簡単にまとめられますが、この問題は関数そのものではありません。張本人は誰ですか?
容疑者:base 64_encodeとbase 64_decode
犯罪:ジャンプとヒント関数を書きました。ヒントを受けて指定のページにジャンプしますが、ヒントを出す時は漢字が文字化けします。
ジャンプモードコードは以下の通りです。
なぜですか?
時々base 64_を使いますエンコードを暗号化した後、GET形式で他のページに伝え、base 64_を使います。デコードを復号すると、文字化けが発生します。
この問題に遭遇した時、どうして正しい解読ができますか?
その後、調べてみると、中国語の文字がいくつかあり、GET形式で送られてきたとき、+号はスペースに置き換えられます。
文字化けを防止するために、私は手順を変えて解読しました。やはり、文字化けの問題はもうなくなりました。
今は問題はもう簡単です。もう一歩多く書けばいいです。
この記事も参照できます。PHP安全URL文字列base 64符号化と復号
容疑者:base 64_encodeとbase 64_decode
犯罪:ジャンプとヒント関数を書きました。ヒントを受けて指定のページにジャンプしますが、ヒントを出す時は漢字が文字化けします。
ジャンプモードコードは以下の通りです。
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="author" content=" [email protected]" />
<title> </title>
<style type="text/css">
*{ padding: 0; margin: 0; }
body{ background: #fff; font-family: ' '; color: #333; font-size: 16px; text-align:center; }
.system-message{ width:600px; margin:150px auto 0 auto; background:#f8f8f8; border:1px solid #ccc;-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;-webkit-box-shadow: #666 0px 0px 10px;-moz-box-shadow: #666 0px 0px 10px;box-shadow: #666 0px 0px 10px;}
.system-message h1{ font-size:30px; font-weight:normal; height:100px; line-height:100px; color:#c60;}
.system-message .jump{ padding: 40px 0;}
.system-message .jump a{ color: #333;}
.system-message .success,.system-message .error{ height:60px; line-height:70px; font-size: 18px; color:#900;}
.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}
</style>
</head>
<body>
<div class="system-message">
<?php if( $_GET['success'] ){?>
<h1>:) !</h1>
<p class="success"><?php echo base64_decode($_GET['message']); ?></p>
<?php }else{?>
<h1>:( !</h1>
<p class="error"><?php echo base64_decode($_GET['message']); ?></p>
<?php }?>
<p class="detail"></p>
<p class="jump"> <b id="wait"><?php echo $_GET['time']; ?></b> , <a id="href" href="<?php echo base64_decode($_GET['url']); ?>"> </a></p>
</div>
<script type="text/javascript">
(function(){
var wait = document.getElementById('wait'),href = document.getElementById('href').href;
var interval = setInterval(function(){
var time = --wait.innerHTML;
if(time <= 0) {
location.href = href;
clearInterval(interval);
};
}, 1000);
})();
</script>
</body>
</html>
PHP redirect関数の定義は以下の通りです。
/* */
function _alert( $success=true, $message='success', $time='3', $url='/'){
header('Location:/include/redirect.php?success='.$success.'&message='.base64_encode($message).'&time='.$time.'&url='.base64_encode($url));
exit;
}
PHPでこのように関数を呼び出すと:
$query = "update content set bid='$clean[bid]',title='$clean[title]',content='$clean[content]',path='$clean[path]' where id=".$clean['id'];
if( mysql_query($query) ){
_alert(1,' ',3,'/admin/manage.php');
}else{
_alert(false,' '.mysql_error(),5,'/admin/manage.php');
}
「修正が成功した」とか「修正が失敗した」という文字が文字化けしています。なぜですか?
時々base 64_を使いますエンコードを暗号化した後、GET形式で他のページに伝え、base 64_を使います。デコードを復号すると、文字化けが発生します。
この問題に遭遇した時、どうして正しい解読ができますか?
その後、調べてみると、中国語の文字がいくつかあり、GET形式で送られてきたとき、+号はスペースに置き換えられます。
文字化けを防止するために、私は手順を変えて解読しました。やはり、文字化けの問題はもうなくなりました。
今は問題はもう簡単です。もう一歩多く書けばいいです。
$str = base64_decode(str_replace(" ","+",$_GET['str']));
最初は容疑者を間違えて文章を書きました。その2つの関数を無実の罪に陥れました。この記事も参照できます。PHP安全URL文字列base 64符号化と復号