ホームページ  >  記事  >  バックエンド開発  >  PHPのbase64が文字化けした場合の対処法

PHPのbase64が文字化けした場合の対処法

藏色散人
藏色散人オリジナル
2020-07-18 09:35:513423ブラウズ

php Base64 コードが文字化けするのは、中国語の文字が含まれているためです。GET 形式で渡すと、「 」記号がスペースに置き換えられ、コードが文字化けします。解決策は、置き換えて復号化することです。 。

PHPのbase64が文字化けした場合の対処法

#PHP Base64 エンコード後の文字化けデコードの解決策

この記事では主に PHP Base64 エンコード後のデコードについて紹介します。コード文字化けの解決策は、base64 エンコーディングに特殊文字が含まれていることです。それらを置き換えるだけです。必要な友達は、

推奨事項を参照してください: "

PHP チュートリアル "

私は発見しましたPHPで物を作る際に起こる問題、単純に文字化けの問題とも考えられますが、この問題は機能自体が原因ではありません。犯人が誰なのか調べてみましょう。

容疑者:base64_encodeとbase64_decode

犯罪内容:ジャンプとプロンプト関数を書きました。プロンプト情報を受け取った後、指定されたページにジャンプしますが、ジャンププロンプト中に中国語が文字化けします。 。

ジャンプ テンプレート コードは次のとおりです:

コードは次のとおりです:

<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="author" content="王健 wj@yurendu.com" />
<title>跳转提示</title>
<style type="text/css">
*{ padding: 0; margin: 0; }
body{ background: #fff; font-family: &#39;微软雅黑&#39;; 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[&#39;success&#39;] ){?>
            <h1>:)   恭喜!</h1>
            <p class="success"><?php echo base64_decode($_GET[&#39;message&#39;]); ?></p>
        <?php }else{?>
            <h1>:(   出错了!</h1>
            <p class="error"><?php echo base64_decode($_GET[&#39;message&#39;]); ?></p>
        <?php }?>
        <p class="detail"></p>
        <p class="jump">系统将在 <b id="wait"><?php echo $_GET[&#39;time&#39;]; ?></b> 后跳转,可直接 <a id="href" href="<?php echo base64_decode($_GET[&#39;url&#39;]); ?>">点此跳转</a></p>
        </div><script type="text/javascript">(function(){var wait = document.getElementById(&#39;wait&#39;),href = document.getElementById(&#39;href&#39;).href;var interval = setInterval(function(){ var time = --wait.innerHTML; if(time <= 0) {  location.href = href;  clearInterval(interval); };}, 1000);})();</script></body></html>

PHP リダイレクト関数は次のように定義されています:

コードは次のとおりです。次のように:

/* 提醒后跳转 */
function _alert( $success=true, $message=&#39;success&#39;, $time=&#39;3&#39;, $url=&#39;/&#39;){
 header(&#39;Location:/include/redirect.php?success=&#39;.$success.&#39;&message=&#39;.base64_encode($message).&#39;&time=&#39;.$time.&#39;&url=&#39;.base64_encode($url));
 exit;
}

PHP で関数を次のように呼び出すと:

コードは次のとおりです:

$query = "update content set bid=&#39;$clean[bid]&#39;,title=&#39;$clean[title]&#39;,content=&#39;$clean[content]&#39;,path=&#39;$clean[path]&#39; where id=".$clean[&#39;id&#39;];
if( mysql_query($query) ){
 _alert(1,&#39;修改成功&#39;,3,&#39;/admin/manage.php&#39;);
}else{
 _alert(false,&#39;修改失败&#39;.mysql_error(),5,&#39;/admin/manage.php&#39;);
}

「変更成功」を表す中国語の文字が表示されます。 」や「変更に失敗しました」と文字化けしてしまいます。 ######なぜ?

base64_encodeで暗号化した後、GETという形で他のページに送信され、base64_decodeで復号すると文字化けしてしまう場合があります。

この問題に遭遇したとき、一部は正しく復号化できるのに、一部は文字化けするのはなぜだろうと疑問に思いました。

後で確認したところ、いくつかの漢字が含まれていることがわかりました。形式では、数字はスペースに置き換えられます。

文字化けを防ぐために、一段階置換を行って復号化したところ、案の定、文字化けの問題はなくなりました!

問題は非常に大きくなりました。簡単です、もっと書くだけです たった 1 ステップで十分です

コードは次のとおりです:

$str = base64_decode(str_replace(" ","+",$_GET[&#39;str&#39;]));

記事は最初に間違った容疑者を特定し、これら 2 つの関数を誤って告発していることが判明しました。 。 。

以上がPHPのbase64が文字化けした場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。