Make WordPress Core


Ignore:
Timestamp:
07/01/2025 03:38:44 PM (8 months ago)
Author:
dmsnell
Message:

sanitize_file_name(): Normalize all space characters to a space.

The sanitize_file_name() function normalizes the no-break space to a normal space (U+0020) in order to prevent issues saving files with the no-break space in it.

This patch expands the replacement to all space characters, since it’s known that macOS stores a NARROW NO-BREAK SPACE (U+202F) in screenshot filenames between the time and the am/pm indicator.

There are deeper issues with the way this function works, but this patch resolves a known and common problem without raising any of the deeper refactoring questions.

Developed in https://github.com/wordpress/wordpress-develop/pull/9103
Discussed in https://core.trac.wordpress.org/ticket/62995

Props audrasjb, desrosj, dmsnell, jonsurrell, matt, room34, siliconforks, zieladam.
Fixes #62995.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/formatting.php

    r60249 r60399  
    20362036
    20372037    if ( $utf8_pcre ) {
    2038         $filename = preg_replace( "#\x{00a0}#siu", ' ', $filename );
     2038        /**
     2039         * Replace all whitespace characters with a basic space (U+0020).
     2040         *
     2041         * The “Zs” in the pattern selects characters in the `Space_Separator`
     2042         * category, which is what Unicode considers space characters.
     2043         *
     2044         * @see https://www.unicode.org/reports/tr44/#General_Category_Values
     2045         * @see https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-6/#G17548
     2046         * @see https://www.php.net/manual/en/regexp.reference.unicode.php
     2047         */
     2048        $filename = preg_replace( '#\p{Zs}#siu', ' ', $filename );
    20392049    }
    20402050
Note: See TracChangeset for help on using the changeset viewer.