Que faire si php base64 est tronqué

藏色散人
Libérer: 2023-03-02 17:02:01
original
3451 Les gens l'ont consulté

Le code php base64 est tronqué parce qu'il contient des caractères chinois. Lorsqu'il est transmis sous la forme GET, le signe "+" sera remplacé par un espace, ce qui entraînera un code tronqué. La solution est de remplacer puis de déchiffrer.

Que faire si php base64 est tronqué

Solution pour décoder les caractères tronqués après l'encodage PHP base64

Cet article présente principalement le décodage après l'encodage PHP base64 La solution aux codes tronqués est que l'encodage base64 contient des caractères spéciaux. Remplacez-les simplement. Les amis dans le besoin peuvent se référer à

Recommandé : "Tutoriel PHP"

J'ai trouvé un. problème lorsque je faisais quelque chose avec PHP. Cela peut être simplement attribué au problème des caractères tronqués, mais ce problème n'est pas causé par la fonction elle-même. Découvrons qui est le coupable.

Suspects : base64_encode et base64_decode

Crime : j'ai écrit une fonction de saut et d'invite, qui accède à la page spécifiée après avoir reçu les informations d'invite, mais les caractères chinois sont tronqués pendant l'invite de saut.

Le code du modèle de saut est le suivant :

Le code est le suivant :

<!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>
Copier après la connexion

La fonction de redirection PHP est définie comme suit :

Le code est le suivant :

/* 提醒后跳转 */
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;
}
Copier après la connexion

Si vous appelez une fonction en PHP comme ceci :

Le code est le suivant :

$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;);
}
Copier après la connexion

Vous verrez que les caractères chinois pour "modification "réussite" ou "échec de la modification" sont tronqués.

Pourquoi ?

Parfois après le cryptage avec base64_encode, il est transmis à d'autres pages sous forme de GET, et une fois déchiffré avec base64_decode, des caractères tronqués apparaissent.

Quand j'ai rencontré ce problème, je me demandais pourquoi certains pouvaient être décryptés correctement, mais certains étaient tronqués

Après avoir vérifié plus tard, j'ai découvert qu'il y avait des caractères chinois lorsqu'ils étaient passés dans GET. formulaire, le signe + sera remplacé par un espace.

Afin d'éviter l'apparition de caractères tronqués, j'ai effectué une substitution en une étape, puis je l'ai déchiffré. Effectivement, le problème des caractères tronqués n'existe plus

Maintenant, le problème est très grave ! simple, il suffit d'écrire plus Une seule étape suffit

Le code est le suivant :

$str = base64_decode(str_replace(" ","+",$_GET[&#39;str&#39;]));
Copier après la connexion

Il s'avère que l'article a identifié le mauvais suspect au début et a accusé à tort ces deux fonctions. . .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal