php生成图片,网页上显示一堆乱码,哪里设置错了?,求大神啊!

<?php
session_start();
for($i=0;$i<4;$i++) {
$_number.= dechex(mt_rand(0,15));
//随机15个数,然后转换成16进制,输出单一的,再进行累积
}
$_SESSION['code'] = $_number;
//跨页面调用
$_width = 100;
//设置图片的属性
$_height = 30;
//设置图片的属性
$_img = imagecreatetruecolor($_width,$_height);
//创建一个真彩图片
header('Content-Type:image/png');
//标头设置图片
imagepng($_img);
//输出图像
imagedestroy($_img);
?>
底下那张图是我转为utf-8无bom运行结果!汗!。。。。。。。
这也太打击人了!

给你这个代码用吧

我给你改好了

<?php
session_start();

header("content-type:image/png");    //设置创建图像的格式

$image_width=70;                      //设置图像宽度

$image_height=18;                     //设置图像高度

srand(microtime()*100000);          //设置随机数的种子

for($i=0;$i<4;$i++){                  //循环输出一个4位的随机数

   $new_number.=dechex(rand(0,15));

}

$_SESSION['code'] =$new_number;    //将获取的随机数验证码写入到SESSION变量中     


$num_image=imagecreate($image_width,$image_height);  //创建一个画布

imagecolorallocate($num_image,255,255,255);     //设置画布的颜色

for($i=0;$i<strlen($_SESSION['code']);$i++){  //循环读取SESSION变量中的验证码

   $font=mt_rand(3,5);                             //设置随机的字体

   $x=mt_rand(1,8)+$image_width*$i/4;               //设置随机字符所在位置的X坐标

   $y=mt_rand(1,$image_height/4);                   //设置随机字符所在位置的Y坐标

   $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));   //设置字符的颜色

   imagestring($num_image,$font,$x,$y,$_SESSION['code'][$i],$color);     //水平输出字符

}

imagepng($num_image);       //生成PNG格式的图像

imagedestroy($num_image);   //释放图像资源
?>

追问

感谢了,可是还是乱码!

追答

你用的什么编辑器?试着用下notepad++,企鹅的软件库就能下载

追问

我就用的notepad++,也不知道是不是这个破电脑的事!win8系统是不是对这些还兼容的不太好!

追答

回来有时间,我帮你远程弄下吧,你先加个扣,叁巴漆一贰贰灵肆

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-30
我试了下我以前碰到过一下,是由于php的文件(utf8编码)有了dom 头造成的。你可以用个编辑器dw,notepad++什么的,另存php为不含dom头的文件试试。另外注意你的php是否开启了gd库追问

还是不行啊!

gd库貌似开着呢!

我试了,转为utf-8的无bom也不行还是乱码!

晕死了!搞了一上午了!

追答

看着想起来了,高版本php不能使用未定义变量,否则会报notice错误。

$_number和$_SESSION['code']在使用前必须用isset判断一下

或者你用老代码的话在最开始处加上

error_reporting(E_ALL & ~E_NOTICE);

屏蔽掉notice错误(不推荐)

isset()判断一下

来确保它被定义了。

下面这个图就输出一个黑底的PNG

<?php

session_start();

$_number="";

for($i=0;$i<4;$i++) {

    $_number.= dechex(mt_rand(0,15));

    //随机15个数,然后转换成16进制,输出单一的,再进行累积

}

isset($_SESSION['code'])?0:$_SESSION['code']="";

$_SESSION['code'] = $_number;

//跨页面调用

$_width = 100;

//设置图片的属性

$_height = 30;

//设置图片的属性

$_img = imagecreatetruecolor($_width,$_height);

//创建一个真彩图片

header('Content-Type:image/png');

//标头设置图片

imagepng($_img);

//输出图像

imagedestroy($_img);

?>

追问

就是这个哦!我是新手!谢谢哦!之前那个$_number被我用@抑制了,刚才查了一下!

本回答被提问者采纳
第2个回答  2014-07-30

好像没有设置文件保存路径跟文件类型吧。这样我发另外一个给你。看下适合你用不。在外面没地方帮你调试PHP。