我感到有些东西在拖累我。我有这两个功能。目的是替换字符,但有些东西不起作用。文件名已更改,但只有空格(“”)更改为 _ 字符(不再有str_replace函数)。 有什么问题?
修改 ** char_replace **位于单独的库文件中,而不是扩展控制器。 我正在使用 char_replace 函数来替换来自输入类型=文本的数据并且它正在工作(正在从不同的控制器调用函数)。
function img_upload($folder) {
$this->path = './public/img/' . $folder;
$imgs = array();
$config = array(
'allowed_types' => 'jpg|jpeg|png|gif',
'upload_path' => $this->path
);
$this->CI->load->library('upload', $config);
foreach ($_FILES as $key => $value) {
$img_name = $this->char_replace($key->name, '_');
$config['file_name'] = $img_name;
if($key != 'logo') :
if (!$this->CI->upload->do_upload($key)) {
} else {
$q = $this->CI->upload->data();
$config['image_library'] = 'gd2';
$config['source_image'] = $this->path . '/' . $q['file_name'];
$config['new_image'] = $this->path . '/thumbs';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 128;
$config['height'] = 128;
$this->CI->load->library('image_lib');
$this->CI->image_lib->clear();
$this->CI->image_lib->initialize($config);
$this->CI->image_lib->resize();
array_push($imgs, $q['file_name']);
}
endif;
}
if(empty($imgs)){
return FALSE;
} else {
return implode(',', $imgs);
}
}
这一个:
function char_replace($text, $rep_simbol = " ")
{
$char = array('!', '&', '?', '/', '/\/', ':', ';', '#', '<', '>', '=', '^', '@', '~', '`', '[', ']', '{', '}');
return $name = str_replace($char, $rep_simbol, $text);
}
答案 0 :(得分:1)
foreach ($_FILES as $key => $value) {
$img_name = $this->char_replace($key->name, '_');
...
此处$key->name
将是未定义的,因此char_replace
将返回一个空字符串。由于file_name
为空,Codeigniter上传库将回退到其_prep_filename
方法。
使用$value['name']
代替$key->name
。
如果您使用file
字段具有相同名称上传多个文件
$count = 0;
foreach ($_FILES as $filename => $values) {
$img_name = is_array($values['name']) ? $values['name'][$count] : $values['name'];
$img_name = $this->char_replace($img_name, '_');
$count++;
答案 1 :(得分:0)
我认为替换必须至少有与搜索一样多的元素:
function char_replace($text, $rep = " ")
{
$char = array('!', '&', '?', '/', '/\/', ':', ';', '#', '<', '>', '=', '^', '@', '~', '`', '[', ']', '{', '}');
$replace = array($rep, $rep, $rep, $rep, %rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep, $rep);
return $name = str_replace($char, $replace, $text);
}