summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2007-10-19 16:59:28 +0000
committerDries Buytaert <dries@buytaert.net>2007-10-19 16:59:28 +0000
commit8d526b10e58fa9cf3bb4eee53a7ec2310b8a595a (patch)
treea1f4c062612110fc6d8f7f01a9b62d2340bd3a83 /includes
parent3742d7428ee114371b5765119a096346a9e37361 (diff)
downloadbrdo-8d526b10e58fa9cf3bb4eee53a7ec2310b8a595a.tar.gz
brdo-8d526b10e58fa9cf3bb4eee53a7ec2310b8a595a.tar.bz2
- Patch #111719 by dvessel et al: ensure clean form IDs.
Diffstat (limited to 'includes')
-rw-r--r--includes/form.inc15
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;
}