我正在尝试编写一个函数,用于将错误的文件名转换为正确的文件名。我尝试使用正则表达式完成此操作,它运行良好,但每次尝试更正名称时都会发出通知。这是我的代码:
private function clean_filename($filename) {
$reserved = preg_quote('\/:*?"<>|', '/');
$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/e", "_", $filename);
return $filename;
}
通知是:
注意:使用未定义的常量_ - 在C:\ Documents and Settings \ A中假定为'_' dministrator \ Desktop \ script \ script.php(89):regexp代码在线 1
可能是问题?在此先感谢!!
答案 0 :(得分:5)
使用e
强制将评估作为PHP表达式。所以你必须使用:
$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/e",
"'_'", $filename); //or "\"_\""; or '"_"' etc.
更好的是删除e
标志而不是你不需要它(你的替换表达式是固定的;它总是一个下划线字符)。
$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/",
"_", $filename);