替换字符 ` 不起作用
replace character ` doesn't work
我有一个网络表单,您可以在其中上传文件。要替换特殊字符,我使用以下函数:
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
扩展程序,以检查您是否可以使用 phpinfo();
创建一个 php 文件,然后 运行 它以查看是否 mbstring
是否为installed/loaded。
如果未安装,您可以通过 运行 宁以下命令安装它:
apt-get install php5-mbstring
service apache2 restart
并启用它 运行:
sudo phpenmod mbstring
这应该可以解决问题。
但如果您使用的是共享主机服务器,则需要联系主机支持以启用它...
mbstring
已安装并启用。但正如 Álvarao 所说,没有必要使用 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;
}
输入:ää#`´+4`32 _.png
输出:ae432__.png
我有一个网络表单,您可以在其中上传文件。要替换特殊字符,我使用以下函数:
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
扩展程序,以检查您是否可以使用 phpinfo();
创建一个 php 文件,然后 运行 它以查看是否 mbstring
是否为installed/loaded。
如果未安装,您可以通过 运行 宁以下命令安装它:
apt-get install php5-mbstring
service apache2 restart
并启用它 运行:
sudo phpenmod mbstring
这应该可以解决问题。
但如果您使用的是共享主机服务器,则需要联系主机支持以启用它...
mbstring
已安装并启用。但正如 Álvarao 所说,没有必要使用 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;
}
输入:ää#`´+4`32 _.png
输出:ae432__.png