From 2b626afb8b37ac146bd45065ebefa50ffe07679a Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Sat, 28 Dec 2013 15:09:53 +0400 Subject: [PATCH] fix NormalizeCharset function --- .../0.0.0/app/libraries/MailSo/Base/Utils.php | 20 ++++++++++--------- .../app/libraries/MailSo/Mail/Message.php | 10 ++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/rainloop/v/0.0.0/app/libraries/MailSo/Base/Utils.php b/rainloop/v/0.0.0/app/libraries/MailSo/Base/Utils.php index a95c91392..09350d42f 100644 --- a/rainloop/v/0.0.0/app/libraries/MailSo/Base/Utils.php +++ b/rainloop/v/0.0.0/app/libraries/MailSo/Base/Utils.php @@ -42,19 +42,21 @@ class Utils /** * @param string $sEncoding + * @param bool $bAsciAsUtf8 = false * * @return string */ - private static function normalizeCharset($sEncoding) + public static function NormalizeCharset($sEncoding, $bAsciAsUtf8 = false) { $sEncoding = \strtolower($sEncoding); switch ($sEncoding) { - case 'ansi': - case 'ansii': - case 'us-ansi': - case 'us-ansii': - $sEncoding = \MailSo\Base\Enumerations\Charset::ISO_8859_1; + case 'asci': + case 'ascii': + case 'us-asci': + case 'us-ascii': + $sEncoding = $bAsciAsUtf8 ? \MailSo\Base\Enumerations\Charset::UTF_8 : + \MailSo\Base\Enumerations\Charset::ISO_8859_1; break; case 'unicode-1-1-utf-7': $sEncoding = \MailSo\Base\Enumerations\Charset::UTF_7; @@ -117,7 +119,7 @@ class Utils */ public static function ValidateCharsetName($sCharset) { - $sCharset = \strtolower(\MailSo\Base\Utils::normalizeCharset($sCharset)); + $sCharset = \strtolower(\MailSo\Base\Utils::NormalizeCharset($sCharset)); return 0 < \strlen($sCharset) && (\in_array($sCharset, array(\MailSo\Base\Enumerations\Charset::UTF_7_IMAP)) || \in_array($sCharset, \MailSo\Base\Utils::$SuppostedCharsets)); } @@ -133,8 +135,8 @@ class Utils { $sResult = $sInputString; - $sFromEncoding = \MailSo\Base\Utils::normalizeCharset($sInputFromEncoding); - $sToEncoding = \MailSo\Base\Utils::normalizeCharset($sInputToEncoding); + $sFromEncoding = \MailSo\Base\Utils::NormalizeCharset($sInputFromEncoding); + $sToEncoding = \MailSo\Base\Utils::NormalizeCharset($sInputToEncoding); if ('' === \trim($sResult) || ($sFromEncoding === $sToEncoding && \MailSo\Base\Enumerations\Charset::UTF_8 !== $sFromEncoding)) { diff --git a/rainloop/v/0.0.0/app/libraries/MailSo/Mail/Message.php b/rainloop/v/0.0.0/app/libraries/MailSo/Mail/Message.php index 1b13dc688..4bfdf7895 100644 --- a/rainloop/v/0.0.0/app/libraries/MailSo/Mail/Message.php +++ b/rainloop/v/0.0.0/app/libraries/MailSo/Mail/Message.php @@ -522,6 +522,7 @@ class Message \MailSo\Base\DateTimeHelper::ParseInternalDateString($sInternalDate); $sCharset = $oBodyStructure ? $oBodyStructure->SearchCharset() : ''; + $sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset); $sHeaders = $oFetchResponse->GetHeaderFieldsValue(); if (0 < \strlen($sHeaders)) @@ -536,6 +537,7 @@ class Message if (0 < \strlen($sContentTypeCharset)) { $sCharset = $sContentTypeCharset; + $sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset); } if (0 < \strlen($sCharset)) @@ -658,6 +660,7 @@ class Message if (0 === \strlen($sCharset) && $oBodyStructure) { $sCharset = $oBodyStructure->SearchCharset(); + $sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset); } if (0 === \strlen($sCharset)) @@ -680,6 +683,11 @@ class Message if (\is_array($aTextParts) && 0 < \count($aTextParts)) { + if (0 === \strlen($sCharset)) + { + $sCharset = \MailSo\Base\Enumerations\Charset::UTF_8; + } + $sHtmlParts = array(); $sPlainParts = array(); @@ -693,6 +701,8 @@ class Message { $sTextCharset = $sCharset; } + + $sTextCharset = \MailSo\Base\Utils::NormalizeCharset($sTextCharset, true); $sText = \MailSo\Base\Utils::DecodeEncodingValue($sText, $oPart->MailEncodingName()); $sText = \MailSo\Base\Utils::ConvertEncoding($sText, $sTextCharset, \MailSo\Base\Enumerations\Charset::UTF_8);