diff --git a/application/core/ErrorHandler.php b/application/core/ErrorHandler.php index c5d071ed..5288f18f 100644 --- a/application/core/ErrorHandler.php +++ b/application/core/ErrorHandler.php @@ -6,6 +6,7 @@ use ManiaControl\Callbacks\Callbacks; use ManiaControl\Files\FileUtil; use ManiaControl\Plugins\PluginManager; use ManiaControl\Update\UpdateManager; +use ManiaControl\Utils\Formatter; use Maniaplanet\DedicatedServer\Xmlrpc\TransportException; /** @@ -111,7 +112,7 @@ class ErrorHandler { // Report error $report = array(); $report['Type'] = 'Error'; - $report['Message'] = $message; + $report['Message'] = Formatter::utf8($message); if ($fileLine) { $report['FileLine'] = $fileLine; } @@ -266,7 +267,7 @@ class ErrorHandler { $type = gettype($arg); $string .= $type . '('; if (is_string($arg)) { - $param = iconv('UTF-8', 'UTF-8//IGNORE', $arg); + $param = Formatter::utf8($arg); if (strlen($param) > 20) { $param = substr($param, 0, 20) . '..'; } diff --git a/application/core/Utils/Formatter.php b/application/core/Utils/Formatter.php index e908179d..6b0a4963 100644 --- a/application/core/Utils/Formatter.php +++ b/application/core/Utils/Formatter.php @@ -171,4 +171,23 @@ abstract class Formatter { $bool = filter_var($value, FILTER_VALIDATE_BOOLEAN); return $bool; } + + /** + * Make sure the given Text is encoded in UTF-8 + * + * @param string $text + * @return string + */ + public static function utf8($text) { + if (!$text) { + return $text; + } + $value = @iconv('UTF-8', 'UTF-8//IGNORE', $text); + if (!$value) { + // Prevent bugged iconv() of some systems + $text = preg_replace('/[^[:print:]]/', '', $text); + $value = iconv('UTF-8', 'UTF-8//IGNORE', $text); + } + return $value; + } }