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到底是要输出英文还是中文!!不要搞错.

时间: 2024-08-10 17:20:54

laravel中如何写验证码文件,并防止中文乱码.的相关文章

将字典直接写入文件,出现中文乱码问题

下面直接将字典写入文件,出现乱码: 解决办法:现将字典NSData,再进行归档NSKeyedArchiver 将字典直接写入文件,出现中文乱码问题,布布扣,bubuko.com

httpclient 4.3 psot方法上传文件与参数 中文乱码解决

废话不多说,直接上有码的! 1 package httpclient; 2 3 import java.io.File; 4 import java.nio.charset.Charset; 5 6 import org.apache.http.Consts; 7 import org.apache.http.Header; 8 import org.apache.http.HttpEntity; 9 import org.apache.http.client.methods.Closeable

Java读取文件,出现中文乱码,GB2312文件读取乱码

读取编码为gb2312格式的文件,出现中文乱码 普通文件读取,通常使用FileReader try (FileReader fileReader = new FileReader(sampleFile); BufferedReader br = new BufferedReader(fileReader);) { String line = null; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) !=

C/C++中如何写头文件

在C语言的学习过程中,我们一般把所有的代码写在一个文件中.随着自身水平的提高,我们发现代码越写越长,代码行数越来越多,把一个工程的所有代码写在一个文件中让人看起开非常吃力.于是我们开始想把代码中的函数归类,同一类放在同一个文件中当中,那么如何实现将一个工程中的代码放到不同文件中呢?这就需要写头文件了.下面的简单列子将让你学会如何写头文件.你也可以点击这里下载源代码自己研究. 假设我们需要定义一些与栈有关的函数,主程序需要调用这些函数. 首先,我们在同一文件夹中新建3个文件(要包含不同的自定义头文

bat脚本启动exe并打开文件后退出 + 中文乱码

写了个脚本用于复制模板到新的cpp文件. 将脚本路径加到环境变量里,只需在cmd窗口输入"new hdu 1419",就会自动将模板拷贝到WORK_DIR下的hdu文件夹内一个名叫"1419.cpp"的文件,并用codeblocks打开. @echo off set WORK_DIR=E:\Documents\problems if exist %WORK_DIR%\%1 goto step2 md %WORK_DIR%\%1 :step2 copy %WORK_D

Perl读取Excel文件并解决中文乱码问题

使用CPAN中的Spreadsheet::ParseExcel模块读取Excel文件中的内容,当遇到中文乱码问题时,使用Spreadsheet::ParseExcel::FmtUnicode模块重新编码,当将中文赋值给变量时,用Encode模块经GB2312解码即可. use strict;   use Spreadsheet::ParseExcel;   use Spreadsheet::ParseExcel::FmtUnicode; use Encode;       my $oFmtC=S

java读取.properties文件及解决中文乱码问题

Java项目中有些信息(例如web的配置信息)可能要放在.properties文件中,那我们应该怎么来读取它们呢,下面给出一个工具类做一说明,并解决了中文乱码问题: 1.其中config.properties文件信息如下: name=\u843D\u82B1\u6709\u610Fwang王 str=\u6D41\u6C34\u65E0\u60C5 boolean=true 2.PropertiesUtil工具类读取.properties文件 import java.io.BufferedInp

JAVA本地读取文件,解决中文乱码问题

JAVA本地读取文件出现中文乱码,查阅一个大神的博客做一下记录 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;imp

casperjs在拆分文件后的中文乱码问题的解决

windows环境. capserjs的中文乱码使用phantom.outputEncoding="GBK";即可解决. 但当我们脚本很大,需要拆分时(参考http://docs.casperjs.org/en/latest/writing_modules.html),拆分到另一文件(example.js)时,中文却无法echo出来. 后来发现, example.js是我们用记事本建立的,编码为ANSI,改为UTF-8编码即可正确显示中文. 延伸,若任意脚本为ansi编码,echo中文