diff options
-rw-r--r-- | includes/form.inc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/includes/form.inc b/includes/form.inc index 9c1062ef4..f5f224265 100644 --- a/includes/form.inc +++ b/includes/form.inc @@ -2002,7 +2002,8 @@ function _form_set_class(&$element, $class = array()) { } /** - * 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. @@ -2010,7 +2011,19 @@ function _form_set_class(&$element, $class = array()) { * 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; } |