note 67152 deleted from ref.filesystem by felipe

From: Date: Mon, 10 Dec 2007 18:01:04 +0000
Subject: note 67152 deleted from ref.filesystem by felipe
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-133234@lists.php.net to get a copy of this message
Note Submitter: tim at astolat dot it ---- Little function to sanitize a user supplied file name, and optionally force a file extension: function sanitize_filename($filename, $forceextension="") { /* 1. Remove leading and trailing dots 2. Remove dodgy characters from filename, including spaces and dots except last. 3. Force extension if specified */ $defaultfilename = "none"; $dodgychars = "[^0-9a-zA-z()_-]"; // allow only alphanumeric, underscore, parentheses and hyphen $filename = preg_replace("/^[.]*/","",$filename); // lose any leading dots $filename = preg_replace("/[.]*$/","",$filename); // lose any trailing dots $filename = $filename?$filename:$defaultfilename; // if filename is blank, provide default $lastdotpos=strrpos($filename, "."); // save last dot position $filename = preg_replace("/$dodgychars/","_",$filename); // replace dodgy characters $afterdot = ""; if ($lastdotpos !== false) { // Split into name and extension, if any. $beforedot = substr($filename, 0, $lastdotpos); if ($lastdotpos < (strlen($filename) - 1)) $afterdot = substr($filename, $lastdotpos + 1); } else // no extension $beforedot = $filename; if ($forceextension) $filename = $beforedot . "." . $forceextension; elseif ($afterdot) $filename = $beforedot . "." . $afterdot; else $filename = $beforedot; return $filename; } echo sanitize_filename("..file<>@**()name.ddd.badextension", "extension")."\n"; echo sanitize_filename("..file<>@**()name.extension.ddd")."\n"; echo sanitize_filename("...", "extension")."\n"; echo sanitize_filename("...")."\n"; echo sanitize_filename("filename")."\n"; echo sanitize_filename("filename", "extension")."\n"; echo sanitize_filename(".xyz...xxx..", "extension")."\n"; echo sanitize_filename(".xyz...xxx..", "")."\n"; produces file_____()name_ddd.extension file_____()name_extension.ddd none.extension none filename filename.extension xyz__.extension xyz__.xxx

« previous php.notes (#133234) next »