SilverStripe\Assets\FileNameFilter
Filter certain characters from file name, for nicer (more SEO-friendly) URLs as well as better filesystem compatibility.
Caution: Does not take care of full filename sanitization in regards to directory traversal etc.,
please use PHP's built-in basename() for this purpose.
For file name filtering see .
The default sanitizer is quite conservative regarding non-ASCII characters,
in order to achieve maximum filesystem compatibility.
In case your filesystem supports a wider character set,
or is case sensitive, you might want to relax these rules
via overriding .
To leave uploaded filenames as they are (being aware of filesystem restrictions),
add the following code to your YAML config:
<code>
FileNameFilter:
default_use_transliterator: false
default_replacements:
</code>
See for a more generic implementation.
Synopsis
class FileNameFilter
{
- // members
- private static Boolean $default_use_transliterator = true;
- private static array $default_replacements = ;
- public array $replacements = ;
- protected Transliterator|false $transliterator;
- // methods
- public string filter()
- public void setReplacements()
- public array getReplacements()
- public Transliterator getTransliterator()
- public void setTransliterator()
- public string getDefaultName()
Hierarchy
Uses
- SilverStripe\Core\Config\Configurable
- SilverStripe\Core\Injector\Injectable
Members
private
- $default_replacements — array
- $default_use_transliterator — SilverStripe\Assets\Boolean
protected
- $transliterator
—
SilverStripe\Assets\Transliterator|false
Transliterator instance, or false to disable.
public
- $replacements — array
Methods
public
- filter() — Depending on the applied replacement rules, this method might result in an empty string. In this case, {@link getDefaultName()} will be used to return a randomly generated file name, while retaining its extension.
- getDefaultName()
- getReplacements()
- getTransliterator()
- setReplacements() — Take care not to add replacements which might invalidate the file structure, e.g. removing dots will remove file extension information.
- setTransliterator()