/** * * @group integration */ public function test_is_encoding() { $strUtf8 = pack("H*", self::$hexUtf8); $strIso88591 = pack("H*", self::$hexIso88591); if (false) { echo '<pre>' . var_export(array('iso88591' => array('string' => $strIso88591, 'utf8 level' => tx_rnbase_util_Strings::isUtf8String($strIso88591), 'utf8 encoding' => tx_mklib_util_Encoding::detectUtfEncoding($strIso88591), 'bytelength' => mb_strlen($strIso88591, '8bit'), 'bin2hex' => bin2hex($strIso88591), 'is utf8' => tx_mklib_util_Encoding::isEncoding($strIso88591, 'UTF-8'), 'is iso88591' => tx_mklib_util_Encoding::isEncoding($strIso88591, 'ISO-8859-1')), 'utf8' => array('string' => $strUtf8, 'utf8 level' => tx_rnbase_util_Strings::isUtf8String($strUtf8), 'utf8 encoding' => tx_mklib_util_Encoding::detectUtfEncoding($strUtf8), 'bytelength' => mb_strlen($strUtf8, '8bit'), 'bin2hex' => bin2hex($strUtf8), 'is utf8' => tx_mklib_util_Encoding::isEncoding($strUtf8, 'UTF-8'), 'is iso88591' => tx_mklib_util_Encoding::isEncoding($strUtf8, 'ISO-8859-1')), 'DEBUG: ' . __FILE__ . '&' . __METHOD__ . ' Line: ' . __LINE__), true) . '</pre>'; } // @TODO: remove me $this->assertTrue(tx_mklib_util_Encoding::isEncoding($strIso88591, 'ISO-8859-1'), '$strIso88591 ist NICHT ISO-8859-1'); $this->assertFalse(tx_mklib_util_Encoding::isEncoding($strIso88591, 'UTF-8'), '$strIso88591 IST UTF-8'); $this->assertTrue(tx_mklib_util_Encoding::isEncoding($strUtf8, 'UTF-8'), '$strUtf8 ist NICHT UTF-8'); $this->assertFalse(tx_mklib_util_Encoding::isEncoding($strUtf8, 'ISO-8859-1'), '$strUtf8 IST ISO-8859-1'); }
public function test_isUtf8String() { // UTF-8 Text: 'The € - ä ö ü'; $utf8Str = 'a:18:{i:0;s:2:"54";i:1;s:2:"68";i:2;s:2:"65";i:3;s:2:"20";i:4;s:2:"e2";i:5;s:2:"82";i:6;s:2:"ac";i:7;s:2:"20";i:8;s:2:"2d";i:9;s:2:"20";i:10;s:2:"c3";i:11;s:2:"a4";i:12;s:2:"20";i:13;s:2:"c3";i:14;s:2:"b6";i:15;s:2:"20";i:16;s:2:"c3";i:17;s:2:"bc";}'; // ISO-Text: 'The EUR - ä ö ü'; $iso8Str = 'a:15:{i:0;s:2:"54";i:1;s:2:"68";i:2;s:2:"65";i:3;s:2:"20";i:4;s:2:"45";i:5;s:2:"55";i:6;s:2:"52";i:7;s:2:"20";i:8;s:2:"2d";i:9;s:2:"20";i:10;s:2:"e4";i:11;s:2:"20";i:12;s:2:"f6";i:13;s:2:"20";i:14;s:2:"fc";}'; $text = tx_rnbase_util_Strings::hexArr2bin(unserialize($utf8Str)); $value = $text; $this->assertTrue(tx_rnbase_util_Strings::isUtf8String($value) > 0, 'String sollte in UTF-8 sein.'); $text = tx_rnbase_util_Strings::hexArr2bin(unserialize($iso8Str)); $value = $text; $this->assertTrue(tx_rnbase_util_Strings::isUtf8String($value) === FALSE, 'String sollte nicht in UTF-8 sein.'); }
/** * Liefert die * @param string $var * @return string|false */ public static function detectUtfEncoding($var) { tx_rnbase::load('tx_rnbase_util_Strings'); $bytes = tx_rnbase_util_Strings::isUtf8String($var); $encoding = FALSE; switch ($bytes) { case 2: $encoding = 'UTF-8'; break; case 3: $encoding = 'UTF-16'; break; case 4: $encoding = 'UTF-32'; break; } return $encoding; }
/** * Wir lassen als Dateinamen nur Buchstaben, Zahlen, * Bindestrich, Unterstrich und Punkt zu. * Umlaute und Sonderzeichen werden versucht in lesbare Buchstaben zu parsen. * Nicht zulässige Zeichen werden in einen Unterstrich umgewandelt. * Der Dateiuname wird optional in Kleinbuchstaben umgewandelt. * * @param string $name * @param boolean $forceLowerCase * @return string */ public static function cleanupFileName($name, $forceLowerCase = TRUE) { $cleaned = $name; if (function_exists('iconv')) { tx_rnbase::load('tx_rnbase_util_Strings'); $charset = tx_rnbase_util_Strings::isUtf8String($cleaned) ? 'UTF-8' : 'ISO-8859-1'; $oldLocal = setlocale(LC_ALL, 0); setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu', 'de', 'ge'); $cleaned = iconv($charset, 'ASCII//TRANSLIT', $cleaned); setlocale(LC_ALL, $oldLocal); } $cleaned = preg_replace('/[^A-Za-z0-9-_.]/', '_', $cleaned); return $forceLowerCase ? strtolower($cleaned) : $cleaned; }