diff --git a/modules/taxonomy.module b/modules/taxonomy.module index a756654f6a7..2d3eb7c7221 100644 --- a/modules/taxonomy.module +++ b/modules/taxonomy.module @@ -734,8 +734,9 @@ function taxonomy_node_save($nid, $terms) { // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x'; preg_match_all($regexp, $vid_value, $matches); - $typed_terms = $matches[1]; + $typed_terms = array_unique($matches[1]); + $inserted = array(); foreach ($typed_terms as $typed_term) { // If a user has escaped a term (to demonstrate that it is a group, // or includes a comma or quote character), we remove the escape @@ -760,7 +761,11 @@ function taxonomy_node_save($nid, $terms) { $typed_term_tid = $edit['tid']; } - db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid); + // Defend against duplicate, different cased tags + if (!isset($inserted[$typed_term_tid])) { + db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid); + $inserted[$typed_term_tid] = TRUE; + } } } } diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module index a756654f6a7..2d3eb7c7221 100644 --- a/modules/taxonomy/taxonomy.module +++ b/modules/taxonomy/taxonomy.module @@ -734,8 +734,9 @@ function taxonomy_node_save($nid, $terms) { // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x'; preg_match_all($regexp, $vid_value, $matches); - $typed_terms = $matches[1]; + $typed_terms = array_unique($matches[1]); + $inserted = array(); foreach ($typed_terms as $typed_term) { // If a user has escaped a term (to demonstrate that it is a group, // or includes a comma or quote character), we remove the escape @@ -760,7 +761,11 @@ function taxonomy_node_save($nid, $terms) { $typed_term_tid = $edit['tid']; } - db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid); + // Defend against duplicate, different cased tags + if (!isset($inserted[$typed_term_tid])) { + db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid); + $inserted[$typed_term_tid] = TRUE; + } } } }