我在URL中遇到了一个"奇怪"字符的问题。
我正在使用上传脚本在服务器上上传文件。当我尝试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
。
文件名:768 f32dd43cc1f90b79c83cceed57eb2.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/
问候,马里奥
EF BB BF
是BOM (Byte Order Mark)的UTF-8表示。某些东西正在保存或返回UTF-8编码的数据,其中开头有可选的 BOM。
好像已经在上传论坛上报告过了。
编辑
OK,那么echo $imeSlike
必须保存的文件将BOM作为前3个字节。在保存PHP文件(或任何文件)时,您需要将编辑器配置为而不是添加BOM。
作为一种选择,如果您使用的是Windows,那么EditPad是突出显示这类编码问题的一个很好的编辑器(尽管还有很多其他的编辑器,您可以在其中配置是否添加BOM)。您可以在选项中关闭BOM。或者您可以尝试将文件保存为ASCII编码,这也将删除BOM。但是,根据PHP的内容,这可能不是一个实际的解决方案。
我找到了一个解决方案- JSON!:)
PHP中的Echo:
$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>');
}
},
...
感谢大家的时间和分享解决方案!
问候,马里奥