Вы можете просто использовать регулярные выражения, чтобы удалить все небезопасные символы, например:
/**
* GetFilenameSafeString()
*
* @global Returns a filename that is save for the OS to save
* @param string
* @return string
*/
function GetFilenameSafeString ( $filename )
{
// convert spaces to an underscore
$filename = preg_replace("/\s+/", "_", $filename);
// remove all non qwerty characters
$filename = preg_replace("/([^a-zA-Z0-9_!@#\$%\^&\(\)\[\]\-]+)/", "", $filename);
return $filename;
}