hasMbString = extension_loaded('mbstring'); $this->hasIconv = extension_loaded('iconv'); } /** * @param string $str The value to check the encoding * @param string $against The type of encoding to check against * @return bool */ public function checkEncoding($str, $against) { if ('UTF-8' == $against) { return $this->isUtf8($str); } if ($this->hasMbString) { return mb_check_encoding($str, $against); } elseif ($this->hasIconv) { return ($str == iconv($against, "{$against}//IGNORE", $str)); } return true; } protected function isUtf8($str) { if ($this->hasMbString) { if (false === mb_check_encoding($str, 'UTF-8')) { return false; } } elseif ($this->hasIconv) { if ($str != iconv('UTF-8', 'UTF-8//IGNORE', $str)) { return false; } } $state = static::UTF8_ACCEPT; for ($i = 0, $len = strlen($str); $i < $len; $i++) { $state = static::$dfa[256 + ($state << 4) + static::$dfa[ord($str[$i])]]; if (static::UTF8_REJECT === $state) { return false; } } return true; } }