From 8e0ead4678e723f94ff128c03201c9c9ac5825db Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Mon, 3 Jun 2013 14:57:26 -0700 Subject: [PATCH] Verify UTF-8 encoding of CSV import --- adminer/lang/cs.inc.php | 1 + adminer/lang/xx.inc.php | 1 + adminer/select.inc.php | 9 +++++---- changes.txt | 1 + todo.txt | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/adminer/lang/cs.inc.php b/adminer/lang/cs.inc.php index 6742a23d..cb40f20e 100644 --- a/adminer/lang/cs.inc.php +++ b/adminer/lang/cs.inc.php @@ -240,6 +240,7 @@ $translations = array( 'Import' => 'Import', '%d row(s) have been imported.' => array('Byl importován %d záznam.', 'Byly importovány %d záznamy.', 'Bylo importováno %d záznamů.'), + 'File must be in UTF-8 encoding.' => 'Soubor musí být v kódování UTF-8.', // in-place editing in select 'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.', diff --git a/adminer/lang/xx.inc.php b/adminer/lang/xx.inc.php index 709b8dd2..a100759b 100644 --- a/adminer/lang/xx.inc.php +++ b/adminer/lang/xx.inc.php @@ -240,6 +240,7 @@ $translations = array( 'Import' => 'xx', '%d row(s) have been imported.' => array('xx', 'xx'), + 'File must be in UTF-8 encoding.' => 'xx', // in-place editing in select 'Ctrl+click on a value to modify it.' => 'xx', diff --git a/adminer/select.inc.php b/adminer/select.inc.php index 11552517..8b4b2296 100644 --- a/adminer/select.inc.php +++ b/adminer/select.inc.php @@ -158,8 +158,11 @@ 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))) { - //! character set + } elseif (!is_string($file = get_file("csv_file", true))) { + $error = upload_error($file); + } elseif (!preg_match('~~u', $file)) { + $error = lang('File must be in UTF-8 encoding.'); + } else { cookie("adminer_import", "output=" . urlencode($adminer_import["output"]) . "&format=" . urlencode($_POST["separator"])); $result = true; $cols = array_keys($fields); @@ -190,8 +193,6 @@ if ($_POST && !$error) { queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result); queries("ROLLBACK"); // after queries_redirect() to not overwrite error - } else { - $error = upload_error($file); } } } diff --git a/changes.txt b/changes.txt index e47094d7..a65716fc 100644 --- a/changes.txt +++ b/changes.txt @@ -4,6 +4,7 @@ Use shadow for highlighting default button Don't use LIMIT 1 if inline updating unique row Don't check previous checkbox on added column in create table (bug #3614245) Order table list by name +Verify UTF-8 encoding of CSV import PostgreSQL: Fix detecting oid column in PDO PostgreSQL: Handle timestamp types (bug #3614086) Add Korean translation diff --git a/todo.txt b/todo.txt index 6adabfeb..5e04a7bf 100644 --- a/todo.txt +++ b/todo.txt @@ -21,7 +21,7 @@ Rank, Tree structure MySQL: Data longer than max_allowed_packet can be sent by mysqli_stmt_send_long_data() -? Geometry support +COLLATE utf8_bin comparison doesn't use index with other than UTF-8 columns SQLite: Copy tables