fix NormalizeCharset function

This commit is contained in:
RainLoop Team 2013-12-28 15:09:53 +04:00
parent 25f9a1e95b
commit 2b626afb8b
2 changed files with 21 additions and 9 deletions

View file

@ -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))
{

View file

@ -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();
@ -694,6 +702,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);
$sText = \MailSo\Base\Utils::Utf8Clear($sText);