| 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 | $pathinfo_filename = substr( $pathinfo_basename, 0, - ( 1 + strlen( $pathinfo_extension ) ) ); |
| | 841 | $filename = sanitize_title( $pathinfo_filename ) . '.' . $pathinfo_extension; |