我有一个网页,你可以上传文件。要替换特殊字符,我使用以下函数:
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的本地机器上运行得很好,而在服务器上使用PHP5.2.0则不起作用。
local output: aeae432__.png
server output: ae似乎,角色´才是问题所在。
发布于 2017-02-21 13:53:08
安装并启用了mbstring。但正如阿尔瓦罗所说,使用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;
}输入:ää#´+432 _.png
输出: ae432__.png
发布于 2017-02-21 10:32:22
确保您的服务器上安装了mbstring扩展,以检查您可以使用phpinfo();创建一个php文件,然后运行它以查看mbstring是否已安装/加载。
如果没有安装它,可以通过运行以下命令来安装:
apt-get install php5-mbstring
service apache2 restart
为了使它能够运行:
sudo phpenmod mbstring
这应该能解决问题。
但是如果您是在共享主机服务器上,那么您需要联系主机支持来启用它.
https://stackoverflow.com/questions/42363071
复制相似问题