2017-02-21 5 views
1

ファイルをアップロードできるWebフォームがあります。このコードは、PHP 5.2.5で私のローカルマシン上で正常に動作し、それはPHP 5.2.0で、サーバ上で動作していないこと、文字を置換する `does not work

function createSafeFilenameForQuestion($filename){ 
    $filename = str_replace(" ", "_", $filename); 
    $search = array("ä", "ö", "ü", "ß", "Ö", "Ä", "Ü"); 
    $replace = array("ae","oe","ue","ss","Oe","Ae","Ue"); 
    $ret = str_replace($search, $replace, $filename); 
    $in_charset = mb_detect_encoding($filename); 
    $ret = iconv($in_charset, 'US-ASCII//TRANSLIT', $ret); 
    $ret = preg_replace("/\s/i", "_", $ret); 
    $ret = preg_replace("/[^0-9a-z_\.]/i", "", $ret); 
    $filename = mb_strtolower($ret); 
    return $filename; 
} 
createSafeFilenameForQuestion("ä#`´+4`32 _.png"); 

私の問題がある:特殊文字Iユーザー次の関数を置き換えます。

local output: aeae432__.png 
server output: ae 

文字は´と思われます。

+1

を持っていますか? – apokryfos

+2

'mb_detect_encoding()'はあなたの考えをしません。実際には基本的に役に立たない。また、iconv($ in_charset、 'US-ASCII // TRANSLIT'、$ ret);と手動置換の両方を行うことは冗長です。 ///いずれの場合でも、私のヒントは、ファイルの元の名前について全く気にしないことです。自分自身(おそらくランダムなもの)を割り当て、ダウンロードヘッダーの元の名前だけを使用します。 –

答えて

0

mbstringがインストールされ、有効になっていました。しかし、Álvaraoが言ったように、iconv($in_charset, 'US-ASCII//TRANSLIT', $ret);を使用する必要はありませんでした。私はラインを削除し、今はそれが動作します。

function createSafeFilenameForQuestion($filename){ 
    $filename = str_replace(" ", "_", $filename); 

    $search = array("ä", "ö", "ü", "ß", "Ö", "Ä", "Ü"); 
    $replace = array("ae","oe","ue","ss","Oe","Ae","Ue"); 
    $ret = str_replace($search, $replace, $filename); 

    $ret = preg_replace("/\s/i", "_", $ret); 
    $ret = preg_replace("/[^0-9a-z_\.]/i", "", $ret); 
    $filename = mb_strtolower($ret); 
    return $filename; 
} 

入力:
出力_.png AA# ` '+ 4`32:ae432を__サーバーがMBSTRINGエクステンションがインストールPNG

0

サーバにmbstring拡張機能がインストールされていることを確認して、phpinfo();でPHPファイルを作成して実行して、mbstringがインストールされているかどうかを確認してください。

それがインストールされていない場合は、followinngのコマンドを実行して、それをインストールすることができます。

apt-get install php5-mbstring

service apache2 restart

をして実行し、それを有効にする:

sudo phpenmod mbstring

これは修正する必要があります問題。

いますが、共有ホスティングサーバー上にある場合、あなたはそれを可能にするためのホスティングサポートに連絡する必要があります...