+
+
+/**
+ * Sanitize a value using htmlspecialchars() or similar, but also
+ * recursively run htmlspecialchars() (or similar) on array keys
+ * and values.
+ *
+ * If $value is not a string or an array with strings in it,
+ * the value is returned as is.
+ *
+ * @param mixed $value The value to be sanitized.
+ * @param mixed $quote_style Either boolean or an integer. If it
+ * is an integer, it must be the PHP
+ * constant indicating if/how to escape
+ * quotes: ENT_QUOTES, ENT_COMPAT, or
+ * ENT_NOQUOTES. If it is a boolean value,
+ * it must be TRUE and thus indicates
+ * that the only sanitizing to be done
+ * herein is to replace single and double
+ * quotes with ' and ", no other
+ * changes are made to $value. If it is
+ * boolean and FALSE, behavior reverts
+ * to same as if the value was ENT_QUOTES
+ * (OPTIONAL; default is ENT_QUOTES).
+ *
+ * @return mixed The sanitized value.
+ *
+ * @since 1.5.2
+ *
+ **/
+function sq_htmlspecialchars($value, $quote_style=ENT_QUOTES) {
+
+ if ($quote_style === FALSE) $quote_style = ENT_QUOTES;
+
+ // array? go recursive...
+ //
+ if (is_array($value)) {
+ $return_array = array();
+ foreach ($value as $key => $val) {
+ $return_array[sq_htmlspecialchars($key, $quote_style)]
+ = sq_htmlspecialchars($val, $quote_style);
+ }
+ return $return_array;
+
+ // sanitize strings only
+ //
+ } else if (is_string($value)) {
+ if ($quote_style === TRUE)
+ return str_replace(array('\'', '"'), array(''', '"'), $value);
+ else
+ return htmlspecialchars($value, $quote_style);
+ }
+
+ // anything else gets returned with no changes
+ //
+ return $value;
+
+}