I think you'll find the `'#^\.#'` is causing the problem with `.gitignore`. Only trouble is removing that creates a backward incompatibility (technically). I'm also thinking that we might want to exclude dot-files and we can't do that with an array of strip-chars.

Sooooo, we could turn $stripChars into an array of regexes, something like:

```
public static function makeSafe($file, array $replacements = array('#^\.#'))
{
     $regex = array_merge(array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#'), $replacements);
```

That will maintain default behaviour but also allow you to write whatever freaky regexes to make the file name comply with your rules. In the case of `.gitignore`, you'd test `$file->makeSafe('.gitignore', array())`.

Or, we say this is beta and we can change what we want and make `$replacements = array()`, adding a suggestion for excluding hidden dot-files in the docblock. I'm not sure what the best way is (though, the former will be required if you push it back to the CMS).