Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn PHP Base64 verstümmelt ist?

Was tun, wenn PHP Base64 verstümmelt ist?

藏色散人
藏色散人Original
2020-07-18 09:35:513417Durchsuche

php base64 verstümmelte Zeichen sind darauf zurückzuführen, dass bei der Übergabe in der GET-Form das „+“-Zeichen durch ein Leerzeichen ersetzt wird, was zu verstümmelten Zeichen führt.

Was tun, wenn PHP Base64 verstümmelt ist?

Lösung zum Dekodieren verstümmelter Zeichen nach der PHP-Base64-Kodierung

In diesem Artikel wird hauptsächlich die Dekodierung nach der PHP-Base64-Kodierung vorgestellt. Die Lösung Zu verstümmelten Codes gehört, dass die Base64-Kodierung einige Sonderzeichen enthält. Freunde in Not können sich auf

Empfehlenswert: „PHP-Tutorial“ beziehen.

Ich habe eins gefunden Problem, als ich etwas mit PHP erstellt habe. Es kann einfach auf das Problem verstümmelter Zeichen zurückgeführt werden, aber dieses Problem wird nicht durch die Funktion selbst verursacht. Finden wir heraus, wer der Täter ist.

Verdächtige: base64_encode und base64_decode

Verbrechen: Ich habe eine Sprung- und Eingabeaufforderungsfunktion geschrieben, die nach Erhalt der Eingabeaufforderungsinformationen zur angegebenen Seite springt, aber die chinesischen Schriftzeichen sind während der Sprungaufforderung verstümmelt.

Der Sprungvorlagencode lautet wie folgt:

Der Code lautet wie folgt:

<!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>

Die PHP-Umleitungsfunktion ist wie folgt definiert:

Der Code lautet wie folgt:

/* 提醒后跳转 */
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;
}

Wenn Sie eine Funktion in PHP wie folgt aufrufen:

Der Code lautet wie folgt:

$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;);
}

Sie werden sehen, dass die chinesischen Zeichen für „Modifikation „Erfolgreich“ oder „Änderung fehlgeschlagen“ sind verstümmelt.

Warum?

Manchmal wird es nach der Verschlüsselung mit base64_encode in Form von GET an andere Seiten übertragen, und beim Entschlüsseln mit base64_decode erscheinen verstümmelte Zeichen.

Als ich auf dieses Problem stieß, fragte ich mich, warum einige korrekt entschlüsselt werden konnten, andere jedoch verstümmelt waren.

Nachdem ich später nachgesehen hatte, stellte ich fest, dass bei der Übergabe in GET einige chinesische Zeichen vorhanden waren Formular wird das +-Zeichen durch ein Leerzeichen ersetzt.

Um zu verhindern, dass verstümmelte Zeichen angezeigt werden, habe ich eine einstufige Ersetzung vorgenommen und sie dann entschlüsselt. Tatsächlich besteht das Problem der verstümmelten Zeichen nicht mehr.

Jetzt ist das Problem sehr groß Ganz einfach, schreiben Sie einfach mehr. Nur ein Schritt reicht aus

Der Code lautet wie folgt:

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

Es stellt sich heraus, dass der Artikel am Anfang den falschen Verdächtigen identifiziert und diese beiden Funktionen fälschlicherweise beschuldigt hat. . .

Das obige ist der detaillierte Inhalt vonWas tun, wenn PHP Base64 verstümmelt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn