PHP base 64符号化後の暗号化の解決方法


PHPでものを作る時一つの問題を発見しました。文字化けの問題に簡単にまとめられますが、この問題は関数そのものではありません。張本人は誰ですか?
容疑者: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>:) &nbsp; !</h1>
            <p class="success"><?php echo base64_decode($_GET['message']); ?></p>
        <?php }else{?>
            <h1>:( &nbsp; !</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符号化と復号