]> git.joonet.de Git - adminer.git/commitdiff
Parse UTF-16 and UTF-8 BOM in all text uploads
authorJakub Vrana <jakub@vrana.cz>
Mon, 7 Mar 2011 13:27:03 +0000 (14:27 +0100)
committerJakub Vrana <jakub@vrana.cz>
Mon, 7 Mar 2011 13:27:03 +0000 (14:27 +0100)
adminer/include/functions.inc.php
adminer/select.inc.php

index e1c2ffe1a96e02cba546c5c9960c0d69128a59de..977d4869f0fa182778d21a6dcd056342cb291c91 100644 (file)
@@ -489,10 +489,18 @@ function get_file($key, $decompress = false) {
        if (!$file || $file["error"]) {
                return $file["error"];
        }
-       return file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]"
+       $return = file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]"
                : ($decompress && ereg('\\.bz2$', $file["name"]) ? "compress.bzip2://$file[tmp_name]"
                : $file["tmp_name"]
        )); //! may not be reachable because of open_basedir
+       if ($decompress) {
+               if (function_exists("iconv") && ereg("^\xFE\xFF|^\xFF\xFE", $return, $regs)) {
+                       $return = iconv("utf-16", "utf-8", $return);
+               } else { // not ternary operator to save memory
+                       $return = ereg_replace("^\xEF\xBB\xBF", "", $return); // UTF-8 BOM
+               }
+       }
+       return $return;
 }
 
 /** Determine upload error
index 4d2f9b4772ca2aca9b74b5c55349af45efa5c573..d5af997cfd318b1103cc6beb0a186187450a8e64 100644 (file)
@@ -141,7 +141,7 @@ if ($_POST && !$error) {
                                queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result);
                        }
                } elseif (is_string($file = get_file("csv_file", true))) {
-                       $file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set
+                       //! character set
                        $result = true;
                        $cols = array_keys($fields);
                        preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches);