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中如何写验证码文件,并防止中文乱码.的更多相关文章
- source命令 导入.sql文件时,中文乱码 或者是注释乱码
1.source命令 导入.sql文件时,中文乱码 或者是注释乱码 首先进入dos命令,进入mysql数据库,之后use 数据库:之后查看你的mysql数据库编码 如下命令:模糊查询变量charact ...
- eclipse中添加进新的java项目中文乱码
eclipse中添加进新的java项目中文乱码 添加学习的一些项目进eclipse中,结果其中的中文注释都变成了乱码 右击项目,点最下面的属性,出来新得弹框 在文本文件编码部分可以发现是GBK格式,选 ...
- 如何解决jQuery easyui中locale文件下easyui-lang-zh_CN中文乱码问题
1.在保存eclipse项目的目录下找到引入easyui-lang-zh_CN.js 2.用记事本打开该js文件,若打开后的中文正常,直接复制,粘贴到项目中的该js文件中,保存 3.若打开后中文出现乱 ...
- securefx 系统中不到指定文件 (转中文)
如何处理上传工具SecureFX中的中文乱码 工具/原料 SecureFX centos7 方法/步骤 转百度知道 https://jingyan.baidu.com/article/eae07 ...
- Linux中文件/文本的中文乱码解决方法
Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致.Linux下使用的编码是utf8,而Windows使用的是gb18030.因此,解决Linux打开txt/c ...
- bat脚本启动exe并打开文件后退出 + 中文乱码
写了个脚本用于复制模板到新的cpp文件. 将脚本路径加到环境变量里,只需在cmd窗口输入“new hdu 1419”,就会自动将模板拷贝到WORK_DIR下的hdu文件夹内一个名叫"1419 ...
- spingboot项目在windows环境中运行时接收参数及日志中文乱码
1.logback.xml配置 appender中添加 <param name="Encoding" value="UTF-8" /> <co ...
- JAVA本地读取文件,解决中文乱码问题
JAVA本地读取文件出现中文乱码,查阅一个大神的博客做一下记录 import java.io.BufferedInputStream;import java.io.BufferedReader;imp ...
- 外部调用JS文件时出现中文乱码的解决办法
若测试网页的编码格式为:gb2312,而调用外部JS文件时出现了乱码(前提是JS文件无错误),则将调用的外部JS文件用记事本打开,然后再保存成编码格式为UTF-8的JS文件即可. 若测试网页的编码格式 ...
随机推荐
- ie 出现 append无效
今天发现用ie append 无效,但是在谷歌浏览器上可以使用,问题在于 拼接字符串的时候出现多了一个标签. 解决方法:检查是否有多余或少写html标签.
- 一个简单的左侧固定右侧自适应demo
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- activemq jmsTemplate 发送消息速度太慢
http://activemq.apache.org/async-sends.html http://bbs.csdn.net/topics/370062485
- centos分区
/boot :用来存放与 Linux 系统启动有关的程序,比如启动引导装载程序等,建议大小为 100MB . /usr :用来存放 Linux 系统中的应用程序,其相关数据较多,建议大于 3GB 以上 ...
- C# IntPtr转换为Byte[]
[DllImport("OpenNetStream.dll")] public static extern int OpenSDK_Data_GetDevList(IntPtr s ...
- Android 4.0 源代码结构
Android源码的第一级目录结构 Android/abi (abi相关代码.ABI:application binary interface,应用程序二进制接口) Android/bioni ...
- 树莓派 config.txt
树莓派开机默认配置文件:/boot/config.txt # For more options and information see # http://www.raspberrypi.org/doc ...
- (转)modelsim10.0C编译ISE14.7的xilinx库(xilinx ip核)
原地址modelsim10.0C编译ISE14.7的xilinx库(xilinx ip核) 1.打开D:\Xilinx\14.7\ISE_DS\ISE\bin\nt64\compxlibgui.e ...
- [整理]S-Record数据格式解析
S-Reord是一种由摩托罗拉公司创建的文件格式(不得不说,摩托罗拉厉害啊,SPI和S-Record都是他们创造的).S-Record的基本字符为ASCII字符,用以表示相应的十六进制数据.该数据格式 ...
- h5 js 图片预览并判断 ajax上传
//建立一個可存取到該file的url function getObjectURL(file) { var url = null; if (window.createObjectURL != unde ...