$v) { if (is_array($data[$k])) { self::prepInput($data[$k]); } else { $data[$k] = urldecode($v); } } } return $data; } /** * Prepare variables for output (by reference). * Data is assumed to be UTF-8 encoded (FIXME?) * * @param mixed $data output parameter(s) * * @return mixed cleaned output parameter(s) */ public static function prepOutput(&$data) { // REFERENCE REQUIRED if (!is_array($data)) { $data = htmlspecialchars($data); } else { foreach ($data as $k => $v) { if (is_array($data[$k])) { self::prepOutput($data[$k]); } else { // FIXME FIXME FIXME $data[$k] = htmlspecialchars($v); } } } return $data; } /** * Parses string $string into an associate array $array. * Acts like parse_str($string, $array) except duplicate * variable names in $string are converted to an array. * * @param array $array of parsed parameters */ public static function parseStr($string, &$array) { $pairs = explode('&', $string); foreach ($pairs as $p) { $vars = explode('=', $p); if (!empty($vars[0]) && isset($vars[1])) { $key = $vars[0]; $value = join('=', array_splice($vars, 1)); if (!isset($array[$key])) { $array[$key] = $value; } elseif (is_array($array[$key])) { array_push($array[$key], $value); } else { $array[$key] = [$array[$key], $value]; } } } } /** * Valid characters in setSpec [1] are URI unreserved characters [2] * Create a valid string by * - transliterating all non-Latin characters * - stripping all diacritics * - dropping any remaining invalid characters * * [1] https://www.openarchives.org/OAI/2.0/openarchivesprotocol.htm#Set * [2] http://www.ietf.org/rfc/rfc2396.txt * */ public static function toValidSetSpec(string $string): string { $t = self::$TO_ASCII->transliterate($string); return preg_replace(self::$NOT_IN_URI_NON_RESERVED_CHARS, '', $t); } } OAIUtils::init(); if (!PKP_STRICT_MODE) { class_alias('\PKP\oai\OAIUtils', '\OAIUtils'); }