0

私は今、解決策を2時間探していますが、オンラインで見つけたものは何も役に立たなかった...

アップロード フォームを備えた Web サービスがありますが、どちらも正常に動作します。私のサービス全体は HTML5、CSS3、および JS で構築されていますが、私のアップロード フォームは PHP です。オンラインでスクリプトを見つけて動作したので、問題ありませんでした。ä、ö、ü、ß などの文字を含むファイルをアップロードしようとすると、サービスに問題があることに気付きました。残念ながらここドイツでは、これらは私たちの言語で一般的な文字であるため、他の文字に置き換える必要があります。

私はあちこちを見ていましたが、現時点では私のコードは次のようになっています:

$files = $_FILES['fileselect'];

foreach ($files['error'] as $id => $err) {
    if ($err == UPLOAD_ERR_OK) {

        $fn = $files['name'][$id];

        $search_array  = array ('ä', 'ö', 'ü', 'ß');
        $replace_array = array ('ae', 'oe', 'ue', 'ss');

        $gfn = str_replace($search_array, $replace_array, $fn);

        move_uploaded_file(
            $files['tmp_name'][$id],
            'bildtransfer/' . $gfn
        );

        echo "<p>Die Datei $gfn wurde hochgeladen.</p>";
    }
}

アップロード自体は、それらの特殊文字がない限り、ファイルで引き続き機能します。私のファイルにはまだすべての特殊文字が含まれていますが、置換されていないように見えますか?

str_replace の代わりに preg_replace が必要ですか? 試してみましたが、これもうまくいきませんでした...

あなたが私を助けてくれることを願っていますか?とても喜ばれます!!! :)

4

2 に答える 2

0

$_FILES 配列の使い方が間違っているようです。エラーはすべてに格納されます-ステートメント$_FILES['fileselect']['error']は必要ありません。foreach

ファイルの元の名前は に保存されているため、呼び出し$_FILES['fileselect']['name']でそれを使用してみてください。str_replace()

$file = $_FILES['fileselect'];
if($file['error'] == UPLOAD_ERR_OK) {
    $fn = $file['name'];

    $search_array  = array ('ä', 'ö', 'ü', 'ß');
    $replace_array = array ('ae', 'oe', 'ue', 'ss');

    $gfn = str_replace($search_array, $replace_array, $fn);

    move_uploaded_file(
        $file['tmp_name'],
        'bildtransfer/' . $gfn
    );

    echo "<p>Die Datei $gfn wurde hochgeladen.</p>";
}

正直なところ、現時点でなぜ機能するのかわかりません!ファイルのアップロードの処理に関する PHP ドキュメントを読んでください。

問題を解決して、わざわざ文字を置き換える必要がないようにするには、@aaron の提案に従って、送信時に UTF-8 を使用していることをブラウザーに伝えてみてください。

header('Content-Type: text/html; charset=utf-8');
于 2013-09-12T13:54:34.143 に答える