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 string $sEncoding
* @param bool $bAsciAsUtf8 = false
* *
* @return string * @return string
*/ */
private static function normalizeCharset($sEncoding) public static function NormalizeCharset($sEncoding, $bAsciAsUtf8 = false)
{ {
$sEncoding = \strtolower($sEncoding); $sEncoding = \strtolower($sEncoding);
switch ($sEncoding) switch ($sEncoding)
{ {
case 'ansi': case 'asci':
case 'ansii': case 'ascii':
case 'us-ansi': case 'us-asci':
case 'us-ansii': case 'us-ascii':
$sEncoding = \MailSo\Base\Enumerations\Charset::ISO_8859_1; $sEncoding = $bAsciAsUtf8 ? \MailSo\Base\Enumerations\Charset::UTF_8 :
\MailSo\Base\Enumerations\Charset::ISO_8859_1;
break; break;
case 'unicode-1-1-utf-7': case 'unicode-1-1-utf-7':
$sEncoding = \MailSo\Base\Enumerations\Charset::UTF_7; $sEncoding = \MailSo\Base\Enumerations\Charset::UTF_7;
@ -117,7 +119,7 @@ class Utils
*/ */
public static function ValidateCharsetName($sCharset) 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)) || return 0 < \strlen($sCharset) && (\in_array($sCharset, array(\MailSo\Base\Enumerations\Charset::UTF_7_IMAP)) ||
\in_array($sCharset, \MailSo\Base\Utils::$SuppostedCharsets)); \in_array($sCharset, \MailSo\Base\Utils::$SuppostedCharsets));
} }
@ -133,8 +135,8 @@ class Utils
{ {
$sResult = $sInputString; $sResult = $sInputString;
$sFromEncoding = \MailSo\Base\Utils::normalizeCharset($sInputFromEncoding); $sFromEncoding = \MailSo\Base\Utils::NormalizeCharset($sInputFromEncoding);
$sToEncoding = \MailSo\Base\Utils::normalizeCharset($sInputToEncoding); $sToEncoding = \MailSo\Base\Utils::NormalizeCharset($sInputToEncoding);
if ('' === \trim($sResult) || ($sFromEncoding === $sToEncoding && \MailSo\Base\Enumerations\Charset::UTF_8 !== $sFromEncoding)) 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); \MailSo\Base\DateTimeHelper::ParseInternalDateString($sInternalDate);
$sCharset = $oBodyStructure ? $oBodyStructure->SearchCharset() : ''; $sCharset = $oBodyStructure ? $oBodyStructure->SearchCharset() : '';
$sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset);
$sHeaders = $oFetchResponse->GetHeaderFieldsValue(); $sHeaders = $oFetchResponse->GetHeaderFieldsValue();
if (0 < \strlen($sHeaders)) if (0 < \strlen($sHeaders))
@ -536,6 +537,7 @@ class Message
if (0 < \strlen($sContentTypeCharset)) if (0 < \strlen($sContentTypeCharset))
{ {
$sCharset = $sContentTypeCharset; $sCharset = $sContentTypeCharset;
$sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset);
} }
if (0 < \strlen($sCharset)) if (0 < \strlen($sCharset))
@ -658,6 +660,7 @@ class Message
if (0 === \strlen($sCharset) && $oBodyStructure) if (0 === \strlen($sCharset) && $oBodyStructure)
{ {
$sCharset = $oBodyStructure->SearchCharset(); $sCharset = $oBodyStructure->SearchCharset();
$sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset);
} }
if (0 === \strlen($sCharset)) if (0 === \strlen($sCharset))
@ -680,6 +683,11 @@ class Message
if (\is_array($aTextParts) && 0 < \count($aTextParts)) if (\is_array($aTextParts) && 0 < \count($aTextParts))
{ {
if (0 === \strlen($sCharset))
{
$sCharset = \MailSo\Base\Enumerations\Charset::UTF_8;
}
$sHtmlParts = array(); $sHtmlParts = array();
$sPlainParts = array(); $sPlainParts = array();
@ -694,6 +702,8 @@ class Message
$sTextCharset = $sCharset; $sTextCharset = $sCharset;
} }
$sTextCharset = \MailSo\Base\Utils::NormalizeCharset($sTextCharset, true);
$sText = \MailSo\Base\Utils::DecodeEncodingValue($sText, $oPart->MailEncodingName()); $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::ConvertEncoding($sText, $sTextCharset, \MailSo\Base\Enumerations\Charset::UTF_8);
$sText = \MailSo\Base\Utils::Utf8Clear($sText); $sText = \MailSo\Base\Utils::Utf8Clear($sText);