1

我在 URL 中遇到“奇怪”字符的问题。

我正在使用 Uploadify 脚本在服务器上上传文件。当我尝试 onComplete 加载预览图像时遇到问题。

这是我的js:

<script type="text/javascript">
$(document).ready(function() {
   $('#file_upload').uploadify({
     'height'    : 30,
     'width'     : 100,
     'buttonImg' : '<?=base_url()?>style/images/buttons/button_dodaj_gray.png',
     'cancelImg' : '<?=base_url()?>style/js/uploadify/cancel.png',
     'wmode'     : 'transparent',
     'onComplete': function(event, ID, fileObj, response, data) {
          if( response != "ERROR" )
          {
              var imageSrc = "";
              //imageSrc = "/ads_images_temp/";
              imageSrc = response;
              $('.image_container').html('<img src="<?=base_url()?>'+imageSrc+'"></img>');
          }
     },
     'fileExt'   : '*.jpg;*.jpeg;*.png;*.gif',
     'displayData': 'percentage',
     'multi'     : false,
     'uploader'  : '<?=base_url()?>style/js/uploadify/uploadify.swf',
     'script'    : '/tools/upload/product/glavna',

     'auto'      : true
   });
});
</script>

问题在于:$('.image_container').html('<img src="<?=base_url()?>'+imageSrc+'"></img>');

我没有得到干净的图像 URL,但我得到了这个:%EF%BB%BF768f32dd43cc1f90b79c83cceed57eb2.png

文件名:768f32dd43cc1f90b79c83cceed57eb2.png

更新: 我用于读取图像的 PHP 文件:

if ( !empty($_FILES) )
            {
                $config['upload_path'] = $temp_path;
                $config['allowed_types'] = '*';
                $config['max_size'] = 4000;
                $config['encrypt_name'] = true;

                $this->load->library('upload', $config);
                $this->upload->initialize($config);

                if( ! ($this->upload->do_upload("Filedata"))) // Napaka pri nalaganju slike
                {
                    //echo $this->upload->display_errors('<p>', '</p>');
                    echo "ERROR";
                }
                else // Vse OK, nadaljuj
                {
                    $img = $this->upload->data();

                    if($img['image_width'] > 650)
                    {
                        $config['image_library'] = 'gd2';
                        $config['source_image'] = $img['full_path'];
                        $config['create_thumb'] = TRUE;
                        $config['maintain_ratio'] = TRUE;
                        $config['width'] = 650;

                        $this->load->library('image_lib', $config);

                        $this->image_lib->resize();
                    }

                    // Resize image    
                    $this->Product_model->resize_image($img['full_path'], $temp_path.'/crop_'.$img["raw_name"].$img["file_ext"], 160, 120);
                    $this->Product_model->resize_image($img['full_path'], $temp_path.'/crop_crop_'.$img["raw_name"].$img["file_ext"], 80, 60);

                    //$this->session->set_userdata("oddaja_oglasa_glavnaSlika",$img["raw_name"].$img["file_ext"]);

                    $imeSlike = $img["raw_name"].$img["file_ext"];

                    echo $imeSlike;
                }
            }

编辑2:

Chrome 控制台截图:http: //imageshack.us/f/818/uploadifychromeconsole1.png/

问候,马里奥

4

2 回答 2

2

EF BB BF字节顺序标记(BOM) 的 UTF-8 表示形式。某些东西在开始时使用可选的BOM保存或返回 UTF-8 编码数据。

好像已经在uploadify论坛报道了。

编辑

好的,所以echo $imeSlike必须与 BOM 一起保存的文件作为前 3 个字节。您需要将编辑器配置为在保存 PHP 文件(或任何文件)时不添加 BOM。

作为替代方案,如果您使用的是 Windows,则可以突出显示此类编码问题的出色编辑器是EditPad(尽管还有很多其他编辑器可以在其中配置是否添加 BOM)。您可以在Options中关闭 BOM 。或者您可以尝试将文件保存为 ASCII 编码,这也会删除 BOM。但是,根据您的 PHP 内容,这可能不是一个实用的解决方案。

于 2011-08-16T12:01:04.310 回答
0

我找到了一个解决方案 - JSON!:)

PHP中的回声:

    $json = array("name" => $imeSlike, "error" => 0);
    echo json_encode($json);

在 JS 中:

...
'onComplete': function(event, ID, fileObj, response, data) {
        eval("var obj1="+response);

        if( obj1.error == 0 )
        {
            $('.image_container').html('<img src="<?=base_url()?>ads_images_temp/crop_'+obj1.name+'"></img>');
        }
     },
...

感谢大家的时间和分享解决方案!

问候,马里奥

于 2011-08-16T20:23:46.310 回答