Php 删除错误的Windows文件名字符
我发现这个函数可以测试字符串是否对Windows文件名和文件夹友好:Php 删除错误的Windows文件名字符,php,regex,Php,Regex,我发现这个函数可以测试字符串是否对Windows文件名和文件夹友好: function is_valid_filename($name) { $parts=preg_split("/(\/|".preg_quote("\\").")/",$name); if (preg_match("/[a-z]:/i",$parts[0])) { unset($parts[0]); } foreach ($parts as $part) { pri
function is_valid_filename($name) {
$parts=preg_split("/(\/|".preg_quote("\\").")/",$name);
if (preg_match("/[a-z]:/i",$parts[0])) {
unset($parts[0]);
}
foreach ($parts as $part) {
print "part = '$part'<br>";
if (preg_match("/[".preg_quote("^|?*<\":>","/")."\a\b\c\e\x\v\s]/",$part)||preg_match("/^(PRN|CON|AUX|CLOCK$|NUL|COMd|LPTd)$/im",str_replace(".","\n",$part))) {
return false;
}
}
return true;
}
函数是有效的\u文件名($name){
$parts=preg\u split(“/(\/”)。preg\u quote(“\\”)/”,$name);
如果(预匹配(“/[a-z]:/i”,$parts[0])){
未设置($parts[0]);
}
foreach($parts作为$part){
打印“part='$part'
”;
如果(preg_match(“/[”).preg_quote(“^ |?*)符合Gordon's,则给出:
$bad = array_merge(
array_map('chr', range(0,31)),
array("<", ">", ":", '"', "/", "\\", "|", "?", "*"));
$result = str_replace($bad, "", $filename);
$bad=array\u merge(
数组映射('chr',范围(0,31)),
数组(“,”:“,”,“/”,“\\”,“\\”,“?”,“*”);
$result=str_replace($bad,“,$filename);
(参考)不止这些。例如,保留的名称也必须删除。Windows不允许您命名文件CON.PHP
-我们都知道这是一项功能,不是吗;)@Gordon实际上,您链接到的msdn文档页面上说允许使用CON.PHP
,但不鼓励使用它。@试一下。创建一个新文件,将其命名为CON.PHP
。Windows(Vista)将告诉您这是一个无效的设备名,并拒绝接受它。您也可以执行CON。无论什么
,都是一样的。@Gordon windows资源管理器不允许您使用这一事实毫无意义。我可以用这个程序创建这样的文件:@artifact可能是,但引用仍然明确声明不要使用以下保留的设备名文件名。建议仅用于保留名称加扩展名,例如,不建议使用con.php
,而只建议使用con
。