Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das verstümmelte Problem der PHP-Überprüfung

So lösen Sie das verstümmelte Problem der PHP-Überprüfung

藏色散人
藏色散人Original
2020-11-03 14:19:291801Durchsuche

Lösung für verstümmelten Code bei der PHP-Verifizierung: Öffnen Sie zuerst den Dateicode; verwenden Sie dann die Funktion „mb_convert_encoding($code,“utf-8“, „gbk“);“

So lösen Sie das verstümmelte Problem der PHP-Überprüfung

Empfohlen: „PHP-Video-Tutorial

php Chinesischer Bestätigungscode, chinesischer verstümmelter Code

Dateicode:

1.cn.php

<?php
/*********************************
* Code by Gently
* 24/07/07
*严正声明:验证码为程序随机生成,“某种巧合”的词语组合属于正常现象
,
*某些别有用心的人不要借题发挥!
*Power by ZendStudio.Net
*(http://www.zendstudio.net/)
*********************************/
session_start();
header("Content-type: image/PNG");
$w=180;
$h=60;
$fontface="fonts/GB2312.ttf"; //字体文件linux支持直接使用windows的字体
$str = "据了解受意大利卡拉拉市文化部部长乔凡娜贝尔纳迪尼邀请云浮市美术家协会主席叶仲桥带着他的四十多幅作品前往卡拉拉市在当地的大理石博物馆举办画展其中欢乐兰寨花开时节两幅作品赠予卡拉拉市博物馆永久收藏全国书法家协会副会长陈永正欣然为画展题字叶仲桥中国画展此次画展不但获得卡拉拉市政府高度重视与支持还引起当地市民及华人华侨的热情关注卡拉拉市的新闻媒体记者专门采访了叶仲桥当地报纸以图文形式大篇幅报道了此次画展的情况";
$code="";
for($i=0;$i<4;$i++){
$Xi=mt_rand(0,strlen($str)/2);
if($Xi%2) $Xi+=1;
$code.=substr($str,$Xi,2);
}
$_SESSION["checkcode"] = mb_convert_encoding($code,"utf-8","gbk");
$im=imagecreatetruecolor($w,$h);
$bkcolor=imagecolorallocate($im,250,250,250);
imagefill($im,0,0,$bkcolor);
/***添加干扰***/
for($i=0;$i<15;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand
(0,255),mt_rand(0,255));
imagearc($im,mt_rand(-10,$w),mt_rand(-10,$h),mt_rand
(30,300),mt_rand(20,200),55,44,$fontcolor);
}
for($i=0;$i<255;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand
(0,255),mt_rand(0,255));
imagesetpixel($im,mt_rand(0,$w),mt_rand(0,$h),$fontcolor);
}
/***********内容*********/
for($i=0;$i<4;$i++){
$fontcolor=imagecolorallocate($im,mt_rand(0,120),mt_rand
(0,120),mt_rand(0,120)); //这样保证随机出来的颜色较深。
$codex=iconv("GB2312","UTF-8",substr($code,$i*2,2));
imagettftext($im,mt_rand(20,24),mt_rand(-
60,60),40*$i+20,mt_rand(30,35),$fontcolor,$fontface,$codex);
}
imagepng($im);
?>

2. Formulardatei

<?php
#header("Content-Type: text/html; charset=utf-8");
session_start();
if(@$_POST[&#39;checkcode&#39;])
{
if($_POST["checkcode"] == $_SESSION["checkcode"])
    {
echo" 恭喜你!验证码输入正确!";
    }else{
echo" 不好意思验证码输入错误!<br>";
echo" 你刚才输入的验证码是:<br>";
echo  $_POST["checkcode"];
echo" <br>正确验证码是:<br>";
echo  $_SESSION["checkcode"];
    }
}
?>
<form action="" method="post">
<img src="cn.php"/></br>
<input type="text" name="checkcode"></br>
<input type="submit" value="submit"></br>
</form>

Zuerst Es gibt eine sehr kritische Codezeile in der Datei cn.php, die in den online veröffentlichten Programmen nicht geschrieben ist.

Das ist

$_SESSION["checkcode"] = mb_convert_encoding($code,"utf-8","gbk");

Verwenden Sie die Funktion mb_convert_encoding, um Chinesisch zu konvertieren, da sonst die von der Sitzung gesendeten Variablen verstümmelt werden.

Das obige ist der detaillierte Inhalt vonSo lösen Sie das verstümmelte Problem der PHP-Überprüfung. 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