字符集一串问题 "linux下测试页面,目前好像静态内容的中文都正常,从数据库取出的中文都成了问号。" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 客户端和服务端的字符集不一至导致的,修改mysql环境变量charactor sets 还有一种办法,在mysql命令行下运行 set names 'gb2312'应该可以正常,可以把这名句加到程序里,用mysql_query("set names 'gb2312'");执行一下。 谢谢!忘了说了,我的win和linux下装的几个东西除了phpmyadmin,版本都不太一样mysql从4.0x变成4.1x,好像影响不小。 mysql_query("set names 'gb2312'");这句在访问DB的时候都需要,还是仅select时需要,还是? 另外在Win下正常的验证图像到了linux下变成了x(没用什么GD库),这怎么回事?(1)把php_gd2.dll这个文件复制到system\system32或c:\windows\system里;(2)把;extension=php_gd2.dll 改为:extension=php_gd2.dll我的extension_dir没有改动。 这句在访问DB的时候都需要,还是仅select时需要,还是?-----------最好是在操作数据库的类里加上就好了,是在select里需要,否则会出现"?".不过最好的解决办法是修改mysql的环境变量,这要看具体情况TO: maoqi2232(maoqi2232)他既然是没用GD,你那两条好象就没什么用了,而且你的明显是在win下的配置嘛,楼主是在win下正常,在linux不显示。TO:ronin_china(非外伤脑震荡) 你说没用GD,那用什么显示的,看一下显示为X的图片的属性,可能是图片路径的问题,win下和linux可能会有区别。mysql的4.x某一个版本在linux安装可能会有你说的字符问题,我也遇到到。不过前几天在www.mysql.com上下载的mysql-max-4.1.11-pc-linux-gnu-i686.tar.gz没有出现这个问题,安装后字符正常(非编译安装) 看来要在每个mysql_query前加这一句,十分感谢!下面的问题解决了就结分.在Win下正常的验证图像到了linux下变成了x(没用什么GD库),这怎么回事? 还好把所有对DB操作放在一个php里,改动很小,立刻见效~那个图片是这样的:现存一个jpg,然后在上面加上随机的几个字符,图片的链接还是php. 某页面图片链接<img src="SecuImage.php">-----------------------------------------------SecuImage.php文件<?include("securityImageClass.php");$si = new securityImage();$si->showImage();?>-----------------------------------------------<?class securityImage {var $inputParam = ""; // Public; var $name = "security"; // Public; var $codeLength = 5; // Private; var $fontSize = 6; // Private; var $fontColor = "000000"; // Private; FFFFFF白色 000000黑色var $imageFile = "map.jpg"; // Private; MUST BE JPEG FILE!var $securityCode = ""; // Privatefunction securityImage() { session_start();} function simpleRandString($length=16, $list="23456789ABCDEFGHIJKMNPRSTUVWXYZ") { /* * Generates a random string with the specified length * Chars are chosen from the provided [optional] list */ mt_srand((double)microtime()*1000000); $newstring = ""; if ($length > 0) { while (strlen($newstring) < $length) { $newstring .= $list[mt_rand(0, strlen($list)-1)]; } } return $newstring;}function showImage() { header("Content-type: image/jpeg"); $this->generateImage(); imagejpeg($this->img); imageDestroy($this->img); }function generateImage() { $this->securityCode = $this->simpleRandString($this->codeLength); $_SESSION['security_code'] = $this->securityCode; $img_path = dirname(__FILE__)."/$this->imageFile"; $this->img = ImageCreateFromJpeg($img_path); $img_size = getimagesize($img_path); $color = imagecolorallocate($this->img, hexdec(substr($this->fontColor, 1, 2)), hexdec(substr($this->fontColor, 3, 2)), hexdec(substr($this->fontColor, 5, 2)) ); $fw = imagefontwidth($this->fontSize); $fh = imagefontheight($this->fontSize); // create a new string with a blank space between each letter so it looks better $newstr = ""; for ($i = 0; $i < strlen($this->securityCode); $i++) { $newstr .= $this->securityCode[$i] ." "; } // remove the trailing blank $newstr = trim($newstr); // center the string $x = ($img_size[0] - strlen($newstr) * $fw ) / 2; // output each character at a random height and standard horizontal spacing for ($i = 0; $i < strlen($newstr); $i++) { $hz = mt_rand( 10, $img_size[1] - $fh - 5); imagechar( $this->img, $this->fontSize, $x + ($fw*$i), $hz, $newstr[$i], $color); }}} ?> 现存一个jpg,然后在上面加上随机的几个字符,图片的链接还是php.--------------------用什么方法在图片上加的字符?我说让你看链接的意思是看看linux下这个jpg图的路径会不会和在win下有区别(打叉的图->右键->属性->图片地址),好好检查一下 最下面一部分是securityImageClass.php文件 1.你看一下的securityImageClass里怎么显示图片的,应该是用GD库用或ImageMagick程序之类的东西,总之是你有什么安装所以不用显示图片2.当然还有一种原因就是生成图片(合成数字的图片)的目录没有写入的权限,你把那个相应目录改成775或777就应该可以了 应该是你的目录没有写入的权限的问题,你把相应的目录改成775或777就OK了,注意是生成合成图的目录,应该就是dirname(__FILE__)这个,你把他echo出来就知道了 图片上加字的时候,只可以为utf-8的格式,否则加不上去的 TO: patchclass(黑翼) 这个应该没关系吧,刚才我试了一下,好象没什么问题,应该就是目录写入权限的事儿,而且他加的是只是数字和英文字母 我把目录和jpg文件的权限都设成了777,还是不行 我看那个图的其他属性,unicode的问题?http://www2.beareyes.com.cn/jpic/1/2005/05/20050518_214817_1.jpg 奇怪了,那个图片显示现在在win下也不好用了,成了x,echo也没表示 不会吧,呵呵, 我在win下试过了,好用啊仔细检查一下 win下还是好用,class里不能有echo 也就是那个$img_path没法echo出来,可能是在内存里建图像吧,这也要权限?? set names 不是每个query前都要,只要每次连接数据库之后执行一次即可。 找到原因了:你那个类用到了imagejpeg函数,这个函数要求:它对JPEG 支持仅在 PHP 编译时加入 GD-1.8 或更高版本时可用。 所以请检查你的linux主机上的GD库的版本,windows下的php安装默认一般都包括了一个GD2.0以上的版本 晕了!闹了一大顿还是要GD库啊哭死!!!就是不愿在linux下折腾GD才找的这个玩意非常感谢!!linux下不用GD又能显示验证码有没什么好办法?分是小事,解决问题才是大事啊 可以用ImageMagick,这个程序在redhat下面是默认安装的,在windows下反而需要单独安装了;里面有包括convert等在内的很多命令,可以实现对图片的处理,比如加水印,合成两个图片等,是在命令行下面执行的,如果用php程序需要system("imagemagick路径/某命令 图片1 图片2"); 如果只是验证码我觉得还是用GD库容易一些,当然做图片水印也可以,网上有好多现成的类。 在WAMPServer环境下调用SpawEditor总报错,不知如何正确设置访问路径 求助!!请教购物网站中的“购买了该商品的顾客还浏览了其他上商品”这个推荐功能的思想及实现 100请教 学习PHP 什么书入门比较好 这段求阶乘代码能不能更短 一个有难度的正则表达式 表单信任问题 smarty 和 css的问题 求助四级联动下拉列框 ?和php之间居然不能空格(还有一个字段的值写不进去) 在这个特别的日子,献分给NO情人的朋友……同时偶还差一分即可多戴一顶绿帽子 php里面的符号~表示什么啊?用在这里有什么用啊? 跪求:html网页文章,查看全部文章需要输入验证码,这是什么文章系统生成的!
在mysql命令行下运行 set names 'gb2312'应该可以正常,
可以把这名句加到程序里,用mysql_query("set names 'gb2312'");执行一下。
mysql从4.0x变成4.1x,好像影响不小。
这句在访问DB的时候都需要,还是仅select时需要,还是?
(2)把;extension=php_gd2.dll
改为:extension=php_gd2.dll
我的extension_dir没有改动。
-----------
最好是在操作数据库的类里加上就好了,是在select里需要,否则会出现"?".
不过最好的解决办法是修改mysql的环境变量,这要看具体情况TO: maoqi2232(maoqi2232)
他既然是没用GD,你那两条好象就没什么用了,而且你的明显是在win下的配置嘛,楼主是在win下正常,在linux不显示。
TO:ronin_china(非外伤脑震荡)
你说没用GD,那用什么显示的,看一下显示为X的图片的属性,可能是图片路径的问题,win下和linux可能会有区别。
mysql的4.x某一个版本在linux安装可能会有你说的字符问题,我也遇到到。不过前几天在www.mysql.com上下载的mysql-max-4.1.11-pc-linux-gnu-i686.tar.gz没有出现这个问题,安装后字符正常(非编译安装)
SecuImage.php文件<?
include("securityImageClass.php");$si = new securityImage();$si->showImage();?>-----------------------------------------------<?
class securityImage {var $inputParam = ""; // Public;
var $name = "security"; // Public;
var $codeLength = 5; // Private;
var $fontSize = 6; // Private;
var $fontColor = "000000"; // Private; FFFFFF白色 000000黑色
var $imageFile = "map.jpg"; // Private; MUST BE JPEG FILE!var $securityCode = ""; // Privatefunction securityImage()
{
session_start();
} function simpleRandString($length=16, $list="23456789ABCDEFGHIJKMNPRSTUVWXYZ")
{
/*
* Generates a random string with the specified length
* Chars are chosen from the provided [optional] list
*/
mt_srand((double)microtime()*1000000); $newstring = ""; if ($length > 0) {
while (strlen($newstring) < $length) {
$newstring .= $list[mt_rand(0, strlen($list)-1)];
}
}
return $newstring;
}function showImage() {
header("Content-type: image/jpeg");
$this->generateImage();
imagejpeg($this->img);
imageDestroy($this->img);
}
function generateImage() { $this->securityCode = $this->simpleRandString($this->codeLength); $_SESSION['security_code'] = $this->securityCode; $img_path = dirname(__FILE__)."/$this->imageFile"; $this->img = ImageCreateFromJpeg($img_path); $img_size = getimagesize($img_path); $color = imagecolorallocate($this->img,
hexdec(substr($this->fontColor, 1, 2)),
hexdec(substr($this->fontColor, 3, 2)),
hexdec(substr($this->fontColor, 5, 2))
); $fw = imagefontwidth($this->fontSize);
$fh = imagefontheight($this->fontSize); // create a new string with a blank space between each letter so it looks better
$newstr = "";
for ($i = 0; $i < strlen($this->securityCode); $i++) {
$newstr .= $this->securityCode[$i] ." ";
}
// remove the trailing blank
$newstr = trim($newstr); // center the string
$x = ($img_size[0] - strlen($newstr) * $fw ) / 2; // output each character at a random height and standard horizontal spacing
for ($i = 0; $i < strlen($newstr); $i++) {
$hz = mt_rand( 10, $img_size[1] - $fh - 5);
imagechar( $this->img, $this->fontSize, $x + ($fw*$i), $hz, $newstr[$i], $color);
}
}
}
?>
--------------------
用什么方法在图片上加的字符?
我说让你看链接的意思是看看linux下这个jpg图的路径会不会和在win下有区别(打叉的图->右键->属性->图片地址),好好检查一下
2.当然还有一种原因就是生成图片(合成数字的图片)的目录没有写入的权限,你把那个相应目录改成775或777就应该可以了
注意是生成合成图的目录,应该就是dirname(__FILE__)这个,你把他echo出来就知道了
这个应该没关系吧,刚才我试了一下,好象没什么问题,应该就是目录写入权限的事儿,而且他加的是只是数字和英文字母
echo也没表示
仔细检查一下
你那个类用到了imagejpeg函数,这个函数要求:它对JPEG 支持仅在 PHP 编译时加入 GD-1.8 或更高版本时可用。
所以请检查你的linux主机上的GD库的版本,windows下的php安装默认一般都包括了一个GD2.0以上的版本
就是不愿在linux下折腾GD才找的这个玩意非常感谢!!linux下不用GD又能显示验证码有没什么好办法?分是小事,解决问题才是大事啊
里面有包括convert等在内的很多命令,可以实现对图片的处理,比如加水印,合成两个图片等,是在命令行下面执行的,如果用php程序需要system("imagemagick路径/某命令 图片1 图片2");
如果只是验证码我觉得还是用GD库容易一些,当然做图片水印也可以,网上有好多现成的类。