新手,按书上做了一个小测试,代码如下:
$dir='./upload';
$files=scandir($dir);foreach($files as $image){
if(substr($image,0,1)!='.') 
{
$image_size = getimagesize("$dir/$image");
$file_size = round( filesize("$dir/$image") / 1024).'kb';

$imageTmp=urlencode($image);

echo
"<tr>
<td><a href=\"javascript:create_window('$imageTmp',$image_size[0],$image_size[1])\">$image</a></td>
<td>$file_size</td>
</tr>\n";

}// end if(substr($image,0,1)!='.')

} //end foreach($files as $image)其中的javascript:create_window只是一个接收显示图片的小小弹窗,这里略掉代码。(页面代码均为 gb2312)为了测试urlencode,我特地在upload这个图片夹下放入2个中文图片名:
1261148029中文上传.jpg
中文_.jpg结果发现,代码中用:$imageTmp=urlencode($image)时,URL是传递的参数是:http://localhost/show_image.php?image=1261148029ÖÐÎÄÉÏ´«.jpg
用$_GET接收无法显示图片,当去掉urlencode时则正常了。我在网上搜了很多,结果找到的都是相反答案,说是中文用urlencode编码可以正确传递,搞晕了,请教大侠们。谢谢!

解决方案 »

  1.   

    刚才删掉了JS弹窗,改用直接<a href="show_image.php?image=$image">链接正常了,看来问题出在js函数接收后被改变了,难道js不能接收编码过后的参数吗?<script type="text/javascript">
    /*<![CDATA[*/
    function create_window(image, width, height){
    width = width +10;
    height = height +10;

    if(window.popup && !window.popup.closed){
    window.popup.resizeTo(width,height);
    }

    var specs = "location=no, scrollbar=no,menubars=no,toolbars=no,resizable=yes,left=0,top=0,width="+width+",height="+height;

    var url="show_image.php?image="+image;
    popup = window.open(url,"ImageWindow",specs);
    popup.focus();}
    /*]]>*/
    </script>