Index: includes/form.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/form.inc,v retrieving revision 1.226 diff -u -p -r1.226 form.inc --- includes/form.inc 25 Sep 2007 11:29:10 -0000 1.226 +++ includes/form.inc 25 Sep 2007 14:41:14 -0000 @@ -1965,7 +1965,8 @@ function _form_set_class(&$element, $cla } /** - * Remove invalid characters from an HTML ID attribute string. + * Prepare an HTML ID attribute string by removing invalid characters and + * guaranteeing uniqueness. * * @param $id * The ID to clean. @@ -1973,7 +1974,19 @@ function _form_set_class(&$element, $cla * The cleaned ID. */ function form_clean_id($id = NULL) { + static $seen_ids = array(); + $id = str_replace(array('][', '_', ' '), '-', $id); + + // Ensure id's are unique. The first occurrence is held but left alone. + // Subsequent occurrences get a number appended to them. + if (isset($seen_ids[$id])) { + $id = $id .'-'. $seen_ids[$id]++; + } + else { + $seen_ids[$id] = 1; + } + return $id; }