844 | | $special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0)); |
845 | | $special_chars = apply_filters('sanitize_file_name_chars', $special_chars, $filename_raw); |
846 | | $filename = str_replace($special_chars, '', $filename); |
847 | | $filename = preg_replace('/[\s-]+/', '-', $filename); |
848 | | $filename = trim($filename, '.-_'); |
849 | | |
850 | | // Split the filename into a base and extension[s] |
851 | | $parts = explode('.', $filename); |
852 | | |
853 | | // Return if only one extension |
854 | | if ( count($parts) <= 2 ) |
855 | | return apply_filters('sanitize_file_name', $filename, $filename_raw); |
856 | | |
857 | | // Process multiple extensions |
858 | | $filename = array_shift($parts); |
859 | | $extension = array_pop($parts); |
860 | | $mimes = get_allowed_mime_types(); |
861 | | |
862 | | // Loop over any intermediate extensions. Munge them with a trailing underscore if they are a 2 - 5 character |
863 | | // long alpha string not in the extension whitelist. |
864 | | foreach ( (array) $parts as $part) { |
865 | | $filename .= '.' . $part; |
866 | | |
867 | | if ( preg_match("/^[a-zA-Z]{2,5}\d?$/", $part) ) { |
868 | | $allowed = false; |
869 | | foreach ( $mimes as $ext_preg => $mime_match ) { |
870 | | $ext_preg = '!^(' . $ext_preg . ')$!i'; |
871 | | if ( preg_match( $ext_preg, $part ) ) { |
872 | | $allowed = true; |
873 | | break; |
874 | | } |
875 | | } |
876 | | if ( !$allowed ) |
877 | | $filename .= '_'; |
878 | | } |
879 | | } |
880 | | $filename .= '.' . $extension; |
881 | | |
| 838 | $pathinfo = pathinfo( $filename ); |
| 839 | extract( $pathinfo, EXTR_PREFIX_ALL, 'pathinfo' ); |
| 840 | if ( $pathinfo_extension ) { |
| 841 | if ( !isset( $pathinfo_filename ) ) // $pathinfo_filename is available since PHP 5.2.0. |
| 842 | $pathinfo_filename = substr( $pathinfo_basename, 0, - ( 1 + strlen( $pathinfo_extension ) ) ); |
| 843 | $filename = sanitize_title( $pathinfo_filename ) . '.' . $pathinfo_extension; |
| 844 | } else |
| 845 | $filename = sanitize_title( $filename ); |