我有一個可以上傳文件的webform。要替換特殊字符我用戶提供以下功能:替換字符`不起作用
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");
我的問題是,這個代碼工作正常,我的本地機器上用PHP 5.2.5,它不會在服務器上使用PHP 5.2.0工作。
local output: aeae432__.png
server output: ae
看來,字符´
是問題所在。
服務器是否已經安裝了MBSTRING擴展。? – apokryfos
'mb_detect_encoding()'不符合你的想法。其實基本上沒用。此外,同時執行'iconv($ in_charset,'US-ASCII // TRANSLIT',$ ret);'和手動替換是多餘的。 ///無論如何,我的提示是不關心文件的原始名稱。自己指定一個,可能是一個隨機的,然後在下載頭文件中使用原始名稱。 –