zoukankan      html  css  js  c++  java
  • 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到底是要输出英文还是中文!!不要搞错.

  • 相关阅读:
    toncat配置文件 简单飞扬
    Magic eDeveloper 学习 简单飞扬
    网站即时通信 简单飞扬
    客户端代码 简单飞扬
    聊天工具代码 简单飞扬
    数据库连接 简单飞扬
    HTML frameset 标签 简单飞扬
    自动递归删除 简单飞扬
    magic 简单飞扬
    Coherence Step by Step 目录
  • 原文地址:https://www.cnblogs.com/zxj95121/p/6024051.html
Copyright © 2011-2022 走看看