How to replace space with hyphen or dash for image filename on upload wordpress PHP Code?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
How to remove accents from uploaded filenames
For this WordPress had a built-in function we can use: remove_accents
This function replaces characters like À Â Å with A and € with E for example.
How to remove accents from uploaded filenames
For this WordPress had a built-in function we can use: remove_accents
This function replaces characters like À Â Å with A and € with E for example.
How to remove unwanted characters from uploaded filenames
To achieve this we we replace all character in the filename with nothing, except for the characters we want to allow. In this case we want to preserve A-Z a-z 0-9 – _ . and space characters. This can be achieved by using PHP function preg_replace which performs a search and replace on a string based on a regular expression.
// Remove every character except A-Z a-z 0-9 . - _ and spaces.
$sanitized_filename = preg_replace( '/[^A-Za-z0-9-_\. ]/', '', $filename );
How to replace spaces in a filename with underscores (or dashes)
Here we also use preg_replace to replace whitespace with an underscore. Note that multiple spaces are replaced by a single underscore.
// Replace spaces (blanks) with an underscore.
$sanitized_filename = preg_replace( '/[[:blank:]]+/', '_', $filename );
If you prefer dashes over underscores use:
// Replace spaces (blanks) with a dash.
$sanitized_filename = preg_replace( '/[[:blank:]]+/', '-', $filename );
Putting it together
You can copy / paste the following code snippet in your WordPress theme’s functions.php. For every file uploaded in WordPress or Gravity Forms upload fields the filename will be cleaned and converted.
/**
* Convert and clean uploaded filenames in WordPress.
* - Remove chars with accents etc, also replaces € with E.
* - Remove every character except A-Z a-z 0-9 . - _ and spaces.
* - Replace spaces (blanks) with an underscore.
*
* @author gravitywp.com
* @param string $filename
* @return string
*/
add_filter( 'sanitize_file_name', 'gwp_sanitize_file_name', 10, 1 );
function gwp_sanitize_file_name( $filename ) {
// Remove chars with accents etc, also replaces € with E.
$sanitized_filename = remove_accents( $filename );
// Remove every character except A-Z a-z 0-9 . - _ and spaces.
$sanitized_filename = preg_replace( '/[^A-Za-z0-9-_\.[:blank:]]/', '', $sanitized_filename );
// Replace spaces (blanks) with an underscore.
$sanitized_filename = preg_replace( '/[[:blank:]]+/', '_', $sanitized_filename );
return $sanitized_filename;
}