簡體   English   中英

PHP文件上傳->替換特殊字符不起作用

[英]PHP file upload -> replace special chars didn't work

我現在正在尋找解決方案兩個小時,但是我在網上發現的任何內容都無濟於事...

我有一個帶有上傳表單的網絡服務,兩者都可以正常工作。 我更喜歡JS,我的整個服務都建立在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>";
    }
}

只要文件沒有特殊字符,上傳本身仍然可以使用。 我的文件仍然包含所有特殊字符,似乎還沒有替換?

我需要preg_replace而不是str_replace嗎? 我嘗試過,但是也沒有用...

我希望你能幫幫我? 會很高興的!!! :)

看來您錯誤地使用了$ _FILES數組。 任何錯誤都將存儲在$_FILES['fileselect']['error'] -不需要foreach語句。

文件的原始名稱存儲在$_FILES['fileselect']['name'] ,因此請嘗試在str_replace()調用中使用該$_FILES['fileselect']['name']

$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');

這可能是編碼問題。 嘗試將標頭中的編碼類型更改為UTF-8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM