Index: wp-admin/includes/class-wp-filesystem-base.php
===================================================================
--- wp-admin/includes/class-wp-filesystem-base.php	(revision 8968)
+++ wp-admin/includes/class-wp-filesystem-base.php	(working copy)
@@ -166,6 +166,20 @@
 		$newmode .= $mode[6] + $mode[7] + $mode[8];
 		return $newmode;
 	}
+
+	/**
+	* Determines if the string provided contains binary characters.
+	*
+	* @since 2.7
+	* @package WordPress
+	* @subpackage WP_Filesystem
+	*
+	* @param string $text String to test against
+	*
+	*/
+	function is_binary( $text ) {
+		return (bool) preg_match('|[^\x20-\x7E]|', $text); //chr(32)..chr(127)
+	}
 }
 
 ?>
Index: wp-admin/includes/class-wp-filesystem-ftpext.php
===================================================================
--- wp-admin/includes/class-wp-filesystem-ftpext.php	(revision 8968)
+++ wp-admin/includes/class-wp-filesystem-ftpext.php	(working copy)
@@ -22,21 +22,6 @@
 
 	var $permission = null;
 
-	var $filetypes = array(
-							'php'=>FTP_ASCII,
-							'css'=>FTP_ASCII,
-							'txt'=>FTP_ASCII,
-							'js'=>FTP_ASCII,
-							'html'=>FTP_ASCII,
-							'htm'=>FTP_ASCII,
-							'xml'=>FTP_ASCII,
-
-							'jpg'=>FTP_BINARY,
-							'png'=>FTP_BINARY,
-							'gif'=>FTP_BINARY,
-							'bmp'=>FTP_BINARY
-							);
-
 	function WP_Filesystem_FTPext($opt='') {
 		$this->method = 'ftpext';
 		$this->errors = new WP_Error();
@@ -103,20 +88,22 @@
 	}
 
 	function get_contents($file, $type = '', $resumepos = 0 ){
-		if( empty($type) ){
-			$extension = substr(strrchr($file, "."), 1);
-			$type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
-		}
+		if( empty($type) )
+			$type = FTP_BINARY;
+
 		$temp = tmpfile();
 		if ( ! $temp )
 			return false;
+
 		if( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) )
 			return false;
+
 		fseek($temp, 0); //Skip back to the start of the file being written to
 		$contents = '';
-		while (!feof($temp)) {
+
+		while ( ! feof($temp) )
 			$contents .= fread($temp, 8192);
-		}
+
 		fclose($temp);
 		return $contents;
 	}
@@ -124,16 +111,18 @@
 		return explode("\n", $this->get_contents($file));
 	}
 	function put_contents($file, $contents, $type = '' ) {
-		if( empty($type) ) {
-			$extension = substr(strrchr($file, "."), 1);
-			$type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_ASCII;
-		}
+		if( empty($type) )
+			$type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
+
 		$temp = tmpfile();
 		if ( ! $temp )
 			return false;
+
 		fwrite($temp, $contents);
 		fseek($temp, 0); //Skip back to the start of the file being written to
+
 		$ret = @ftp_fput($this->link, $file, $temp, $type);
+
 		fclose($temp);
 		return $ret;
 	}
Index: wp-admin/includes/class-wp-filesystem-ftpsockets.php
===================================================================
--- wp-admin/includes/class-wp-filesystem-ftpsockets.php	(revision 8968)
+++ wp-admin/includes/class-wp-filesystem-ftpsockets.php	(working copy)
@@ -22,21 +22,6 @@
 
 	var $permission = null;
 
-	var $filetypes = array(
-							'php' => FTP_ASCII,
-							'css' => FTP_ASCII,
-							'txt' => FTP_ASCII,
-							'js'  => FTP_ASCII,
-							'html'=> FTP_ASCII,
-							'htm' => FTP_ASCII,
-							'xml' => FTP_ASCII,
-
-							'jpg' => FTP_BINARY,
-							'png' => FTP_BINARY,
-							'gif' => FTP_BINARY,
-							'bmp' => FTP_BINARY
-							);
-
 	function WP_Filesystem_ftpsockets($opt = '') {
 		$this->method = 'ftpsockets';
 		$this->errors = new WP_Error();
@@ -105,23 +90,27 @@
 		if( ! $this->exists($file) )
 			return false;
 
-		if( empty($type) ){
-			$extension = substr(strrchr($file, '.'), 1);
-			$type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_AUTOASCII;
-		}
+		if( empty($type) )
+			$type = FTP_AUTOASCII;
 		$this->ftp->SetType($type);
+
 		$temp = wp_tempnam( $file );
+
 		if ( ! $temphandle = fopen($temp, 'w+') )
 			return false;
+
 		if ( ! $this->ftp->fget($temphandle, $file) ) {
 			fclose($temphandle);
 			unlink($temp);
 			return ''; //Blank document, File does exist, Its just blank.
 		}
+
 		fseek($temphandle, 0); //Skip back to the start of the file being written to
 		$contents = '';
+
 		while ( ! feof($temphandle) )
 			$contents .= fread($temphandle, 8192);
+
 		fclose($temphandle);
 		unlink($temp);
 		return $contents;
@@ -132,10 +121,9 @@
 	}
 
 	function put_contents($file, $contents, $type = '' ) {
-		if( empty($type) ){
-			$extension = substr(strrchr($file, '.'), 1);
-			$type = isset($this->filetypes[ $extension ]) ? $this->filetypes[ $extension ] : FTP_AUTOASCII;
-		}
+		if( empty($type) )
+			$type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
+
 		$this->ftp->SetType($type);
 
 		$temp = wp_tempnam( $file );
@@ -143,9 +131,12 @@
 			unlink($temp);
 			return false;
 		}
+
 		fwrite($temphandle, $contents);
 		fseek($temphandle, 0); //Skip back to the start of the file being written to
+
 		$ret = $this->ftp->fput($file, $temphandle);
+
 		fclose($temphandle);
 		unlink($temp);
 		return $ret;

