0

从我下面的代码中,我可以上传带有空格的图像并将后续单词大写,但是如果我尝试在我的视图页面中查看这些图像,那么它是不可见的。我收到类似的错误The URI you submitted has disallowed characters.

我正在显示图像,<img src="<?php echo base_url().'uploads/avatar/'.$avatar?>"/> 因此我该如何解决此错误,以允许 img 标签读取带有空格的图像名称并将后续单词大写。

或替代解决方案,如何在上传时删除任何空格或将后续单词与图像名称大写?

我正在使用以下代码上传文件。

   function do_upload()
        { 
         $this->load->library('form_validation'); 

        if((isset($_FILES['userfile']['size'])) && ($_FILES['userfile']['size'] > 0))
            {
                 $this->form_validation->set_error_delimiters('<li  class="errorlist">', '</li>')->set_rules('userfile', 'New Image', 'trim|callback_valid_upload_userfile');   
            }    
      $uid=$this->session->userdata('userid');
    $config['upload_path'] = './uploads/avatar/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '5000'; 
    $this->load->library('upload', $config);  

 if ( $this->input->post('user_id') && $this->form_validation->run() == TRUE)
 {  
         $avatar= $_FILES['userfile']['name'];  //getting the file name  
          $this->loginmodel->update_user_basic_info($uid); //update both 

    }
4

2 回答 2

4

这很简单,使用:

$config['remove_spaces'] = TRUE;

因此,您必须在上传过程之后$this->upload->data()不是$_FILES上传过程中获取文件名。

于 2013-05-04T18:21:15.603 回答
0

如果你想生成友好的图像文件名,可以很好地与 URL 搭配使用……也许你可以扩展 CodeIgniter 的 URL 帮助器以包含一个名为 的函数slugify()

MY_url_helper.phpapplication/helpers/目录中创建。这个文件的内容:

<?php
function slugify($text){ 
  // replace non letter or digits by -
  $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
  // trim
  $text = trim($text, '-');
  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
  // lowercase
  $text = strtolower($text);
  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);
  if (empty($text)) return "";
  return $text;
}

接下来,通过在...中添加条目来自动加载url 帮助config/autoload.php程序,例如:$autoload['helper'] = array('html', 'url', ...);

最后,使用slugify()...

$image1= slugify($_FILES['userfile']['name']);

至于解释 slugify 的每个步骤是如何工作的,它确实嵌入在评论中。它接受输入文件名参数,并一次将其准备为对 URL 更友好的等效操作。

于 2013-05-04T09:42:00.427 回答