1

何かが私を荒らしている気がします。この2つの機能があります。目的は文字を置き換えることですが、何かが機能していません。ファイルの名前は変更されますが、スペース(" ")のみが_文字に変更されます (str_replace 関数はもうありません)。なにが問題ですか?

EDIT **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);
    }
4

2 に答える 2

1
foreach ($_FILES as $key => $value) {
  $img_name = $this->char_replace($key->name, '_');
  ...

ここで$key->nameは未定義になるためchar_replace、空の文字列が返されます。が空であるためfile_name、Codeigniter Upload ライブラリはその_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++;
于 2012-10-26T16:29:05.607 に答える
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);
}
于 2012-10-26T16:04:43.953 に答える