laravel中如何写验证码文件,并防止中文乱码.
Posted 张贤健
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel中如何写验证码文件,并防止中文乱码.相关的知识,希望对你有一定的参考价值。
本例为生成中文验证码,专为laravel而生.
//控制器: public function getVcode(Request $request){ $width=845; $height=125; $fp=fopen(url(‘/‘).‘/front/register/chengyu.txt‘,‘r‘);//打开本地文件,里面存了150条成语!一行一条. $hang=rand(0,149); for($i=0;;$i++){ $get=fgets($fp); if($i==$hang) break; } $text=$get;//得到的成语字符串 header(‘content-type:image/jpeg‘); //1、创建画布 $img = imagecreatetruecolor($width,$height); //1-1、背景颜色随机 0~125深色 126~255 浅色 $bgColor = imagecolorallocate($img,rand(126,255),rand(126,255),rand(126,255)); imagefill($img,0,0,$bgColor); //2、写字或画画 //2-1、画点点 for($i = 0 ; $i <= ($height*$width/15) ; $i++){ $pixX = rand(5,$width-5);//随机x的位置 $pixY = rand(5,$height-5);//随机的Y的位置 $pixColor = imagecolorallocate($img,rand(0,125),rand(0,125),rand(0,125)); imagesetpixel($img,$pixX,$pixY,$pixColor); } //2-2、写字 $code = ‘abcdefghijklmnopqrstuvwxyz‘; $len = mb_strlen($text,‘UTF-8‘); for($j = 1 ; $j <= 4 ; $j++){ //字体大小随机从15像素~20像素 $fontSize = rand(($height/2-5),($height/2+10)); //x的位置 $fontX = ($width/ 4) * ($j-1);//25 50 75 100 //Y的位置 $fontY = $height*0.75; //字体颜色 $fontColor = imagecolorallocate($img,rand(0,125),rand(0,125),rand(0,125)); //每次随机出来的字 $fontText = mb_substr($text,$j-1,1,‘UTF-8‘);//读取一个汉字 //echo $fontText; imagettftext($img,$fontSize,0,$fontX,$fontY,$fontColor,$_SERVER[‘DOCUMENT_ROOT‘].‘/front/register/FZSTK.TTF‘,$fontText); } //3、输出或保存 imagejpeg($img); //4、解析模板 view(‘front.register.showvcode‘,[‘dd‘=> imagejpeg($img)]);
//5销毁资源
image_destroy($img); }
主要 解决以下一个问题:
1 laravel路由和模板文件自行设计.
2 fopen打开public目录下的文件:
$fp=fopen(url(‘/‘).‘/front/register/chengyu.txt‘,‘r‘);
3 截取汉字,utf8格式,使用mb_substr
mb_substr($text,$j-1,1,‘UTF-8‘);
4 ttf文件访问
$_SERVER[‘DOCUMENT_ROOT‘].‘/front/register/FZSTK.TTF‘
5 变量带到模板
[‘dd‘=> imagejpeg($img)]
6 文件保存为utf-8无bom格式,以及注意TTF到底是要输出英文还是中文!!不要搞错.
以上是关于laravel中如何写验证码文件,并防止中文乱码.的主要内容,如果未能解决你的问题,请参考以下文章