我有一个可以上传文件的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);'和手动替换是多余的。 ///无论如何,我的提示是不关心文件的原始名称。自己指定一个,可能是一个随机的,然后在下载头文件中使用原始名称。 –