public static function clean($var, $charset = NULL) { if (!$charset) { // Use the application character set $charset = JsonApiApplication::$charset; } if (is_array($var) or is_object($var)) { foreach ($var as $key => $val) { // Recursion! $var[UTF8::clean($key)] = UTF8::clean($val); } } elseif (is_string($var) and $var !== "") { // Remove control characters $var = UTF8::strip_ascii_ctrl($var); if (!UTF8::is_ascii($var)) { // Temporarily save the mb_substitute_character() value into a variable $mb_substitute_character = mb_substitute_character(); // Disable substituting illegal characters with the default '?' character mb_substitute_character("none"); // convert encoding, this is expensive, used when $var is not ASCII $var = mb_convert_encoding($var, $charset, $charset); // Reset mb_substitute_character() value back to the original setting mb_substitute_character($mb_substitute_character); } } return $var; }
/** * Recursively cleans arrays, objects, and strings. Removes ASCII control * codes and converts to the requested charset while silently discarding * incompatible characters. * * @param mixed $str * @return string */ public static function clean($str) { if (is_array($str) || is_object($str)) { foreach ($str as $key => $val) { $str[$key] = self::clean($val); } } else { if (is_string($str) && $str !== '') { $str = mb_strtolower(UTF8::strip_ascii_ctrl($str)); if (!UTF8::is_ascii($str)) { $str = strtolower(self::transliterate_to_ascii($str)); } if (!UTF8::is_ascii($str)) { $str = UTF8::strip_non_ascii($str); } } } return $str; }
/** * Recursively cleans arrays, objects, and strings. Removes ASCII control * codes and converts to the requested charset while silently discarding * incompatible characters. * * UTF8::clean($_GET); // Clean GET data * * @param mixed $var variable to clean * @param string $charset character set, defaults to Kohana::$charset * @return mixed * @uses UTF8::clean * @uses UTF8::strip_ascii_ctrl * @uses UTF8::is_ascii */ public static function clean($var, $charset = 'utf-8') { if (is_array($var) or is_object($var)) { foreach ($var as $key => $val) { // Recursion! $var[UTF8::clean($key)] = UTF8::clean($val); } } elseif (is_string($var) and $var !== '') { // Remove control characters $var = UTF8::strip_ascii_ctrl($var); if (!UTF8::is_ascii($var)) { // Disable notices $error_reporting = error_reporting(~E_NOTICE); $var = mb_convert_encoding($var, $charset, $charset); // Turn notices back on error_reporting($error_reporting); } } return $var; }
/** * Tests UTF8::strip_ascii_ctrl * * @test * @dataProvider provider_strip_ascii_ctrl */ public function test_strip_ascii_ctrl($input, $expected) { $this->assertSame($expected, UTF8::strip_ascii_ctrl($input)); }