"linux下测试页面,目前好像静态内容的中文都正常,从数据库取出的中文都成了问号。"

解决方案 »

  1.   

    客户端和服务端的字符集不一至导致的,修改mysql环境变量charactor sets
      

  2.   

    还有一种办法,
    在mysql命令行下运行 set names 'gb2312'应该可以正常,
    可以把这名句加到程序里,用mysql_query("set names 'gb2312'");执行一下。
      

  3.   

    谢谢!忘了说了,我的win和linux下装的几个东西除了phpmyadmin,版本都不太一样
    mysql从4.0x变成4.1x,好像影响不小。
      

  4.   

    mysql_query("set names 'gb2312'");
    这句在访问DB的时候都需要,还是仅select时需要,还是?
      

  5.   

    另外在Win下正常的验证图像到了linux下变成了x(没用什么GD库),这怎么回事?(1)把php_gd2.dll这个文件复制到system\system32或c:\windows\system里;
    (2)把;extension=php_gd2.dll
          改为:extension=php_gd2.dll
    我的extension_dir没有改动。
      

  6.   

    这句在访问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没有出现这个问题,安装后字符正常(非编译安装)
      

  7.   

    看来要在每个mysql_query前加这一句,十分感谢!下面的问题解决了就结分.在Win下正常的验证图像到了linux下变成了x(没用什么GD库),这怎么回事?
      

  8.   

    还好把所有对DB操作放在一个php里,改动很小,立刻见效~那个图片是这样的:现存一个jpg,然后在上面加上随机的几个字符,图片的链接还是php.
      

  9.   

    某页面图片链接<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);
    }
    }

    ?>
      

  10.   

    现存一个jpg,然后在上面加上随机的几个字符,图片的链接还是php.
    --------------------
    用什么方法在图片上加的字符?
    我说让你看链接的意思是看看linux下这个jpg图的路径会不会和在win下有区别(打叉的图->右键->属性->图片地址),好好检查一下
      

  11.   

    最下面一部分是securityImageClass.php文件
      

  12.   

    1.你看一下的securityImageClass里怎么显示图片的,应该是用GD库用或ImageMagick程序之类的东西,总之是你有什么安装所以不用显示图片
    2.当然还有一种原因就是生成图片(合成数字的图片)的目录没有写入的权限,你把那个相应目录改成775或777就应该可以了
      

  13.   

    应该是你的目录没有写入的权限的问题,你把相应的目录改成775或777就OK了,
    注意是生成合成图的目录,应该就是dirname(__FILE__)这个,你把他echo出来就知道了
      

  14.   

    图片上加字的时候,只可以为utf-8的格式,否则加不上去的
      

  15.   

    TO: patchclass(黑翼) 
    这个应该没关系吧,刚才我试了一下,好象没什么问题,应该就是目录写入权限的事儿,而且他加的是只是数字和英文字母
      

  16.   

    我把目录和jpg文件的权限都设成了777,还是不行
      

  17.   

    我看那个图的其他属性,unicode的问题?http://www2.beareyes.com.cn/jpic/1/2005/05/20050518_214817_1.jpg
      

  18.   

    奇怪了,那个图片显示现在在win下也不好用了,成了x,
    echo也没表示
      

  19.   

    不会吧,呵呵, 我在win下试过了,好用啊
    仔细检查一下
      

  20.   

    win下还是好用,class里不能有echo
      

  21.   

    也就是那个$img_path没法echo出来,可能是在内存里建图像吧,这也要权限??
      

  22.   

    set names 不是每个query前都要,只要每次连接数据库之后执行一次即可。
      

  23.   

    找到原因了:
    你那个类用到了imagejpeg函数,这个函数要求:它对JPEG 支持仅在 PHP 编译时加入 GD-1.8 或更高版本时可用。 
    所以请检查你的linux主机上的GD库的版本,windows下的php安装默认一般都包括了一个GD2.0以上的版本
      

  24.   

    晕了!闹了一大顿还是要GD库啊哭死!!!
    就是不愿在linux下折腾GD才找的这个玩意非常感谢!!linux下不用GD又能显示验证码有没什么好办法?分是小事,解决问题才是大事啊
      

  25.   

    可以用ImageMagick,这个程序在redhat下面是默认安装的,在windows下反而需要单独安装了;
    里面有包括convert等在内的很多命令,可以实现对图片的处理,比如加水印,合成两个图片等,是在命令行下面执行的,如果用php程序需要system("imagemagick路径/某命令 图片1 图片2"); 
    如果只是验证码我觉得还是用GD库容易一些,当然做图片水印也可以,网上有好多现成的类。