Uploaded files containing special characters, like accented characters or glyphs like € and £ of even whitespace characters, can cause al sorts of issues, depending on the configuration of your hosting server. This can cause a lot of headaches when your Gravity Form has an upload field where people can upload files with uncommon characters in the filename.
Luckily there is an easy solution by adding a simple snippet to your themes functions.php. We will explain every line of code, before putting it all together.
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.
// Removes chars with accents etc, also replaces € with E.
$sanitized_filename = remove_accents( $filename );
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;
}
Note we added a docblock explaining the code and that we replace $filename with $sanitized_filename in any subsequent line after the first replacement.
Our Premium add-ons for Gravity Forms
Advanced Merge Tags
This Gravity Forms Add-On adds extra Merge Tag modifiers (and a lot of power). From the most common used functions like capitalize and length to changing date formats.
Entry to Database
Integrates Gravity Forms with internal or external databases, offering flexible mapping of form fields to database columns and real-time synchronization between entries and database rows.
List Datepicker
Add a Datepicker with calendar select to a column or multiple columns in a Gravity Forms List Field.
n8n Connector
Connect Gravity Forms to n8n and automate your workflows with secure, flexible, and powerful webhooks. Go beyond simple notifications and build advanced, two-way automations.
Read tutorials about
How to Validate Repeatable Contact Rows in Gravity Forms
Learn how to validate repeatable Gravity Forms List field rows with GravityWP List Text. This tutorial shows how to add email and regex validation, test invalid values, and confirm that valid team roster data is stored correctly.
Gravity Forms Airtable Integration: Create Records From Form Submissions
Learn how to build a Gravity Forms Airtable integration with GravityWP API Connector. Send form submissions to Airtable, create new records automatically, and save the returned Airtable Record ID and response back to Gravity Forms.
Gravity Forms Asana Integration: Create Tasks From Form Submissions
Learn how to connect Gravity Forms to Asana with GravityWP API Connector. This tested workflow creates Asana tasks from form submissions and saves the returned task ID and URL back to Gravity Forms.
Gravity Forms Google Calendar Integration: Create Events From Form Submissions
Connect Gravity Forms to Google Calendar with GravityWP API Connector. Learn how to create calendar events from form submissions, map event details, configure OAuth 2.0, handle time zones, and save the returned Event ID and URL.