예제 #1
0
 /**
  * @return string
  */
 public static function ConvertSystemString($sSrt)
 {
     if (!empty($sSrt) && !\MailSo\Base\Utils::IsUtf8($sSrt)) {
         $sCharset = \MailSo\Base\Utils::DetectSystemCharset();
         if (!empty($sCharset)) {
             $sSrt = \MailSo\Base\Utils::ConvertEncoding($sSrt, $sCharset, \MailSo\Base\Enumerations\Charset::UTF_8);
         } else {
             $sSrt = @\utf8_encode($sSrt);
         }
     }
     return $sSrt;
 }
예제 #2
0
 /**
  * @param string $sCharset
  * @param string $sValue
  *
  * @return string
  */
 public static function NormalizeCharsetByValue($sCharset, $sValue)
 {
     $sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset);
     if (\MailSo\Base\Enumerations\Charset::UTF_8 !== $sCharset && \MailSo\Base\Utils::IsUtf8($sValue) && false === \strpos($sCharset, \MailSo\Base\Enumerations\Charset::ISO_2022_JP)) {
         $sCharset = \MailSo\Base\Enumerations\Charset::UTF_8;
     }
     return $sCharset;
 }
예제 #3
0
 /**
  * @param string $sEncodedValue
  * @param string $sIncomingCharset = ''
  * @param string $sForcedIncomingCharset = ''
  *
  * @return string
  */
 public static function DecodeHeaderValue($sEncodedValue, $sIncomingCharset = '', $sForcedIncomingCharset = '')
 {
     $sValue = $sEncodedValue;
     if (0 < \strlen($sIncomingCharset)) {
         if (\MailSo\Base\Enumerations\Charset::UTF_8 !== $sIncomingCharset && \MailSo\Base\Utils::IsUtf8($sValue)) {
             $sIncomingCharset = \MailSo\Base\Enumerations\Charset::UTF_8;
         }
         $sValue = \MailSo\Base\Utils::ConvertEncoding($sValue, $sIncomingCharset, \MailSo\Base\Enumerations\Charset::UTF_8);
     }
     $sValue = \preg_replace('/\\?=[\\n\\r\\t\\s]{1,5}=\\?/m', '?==?', $sValue);
     $sValue = \preg_replace('/[\\r\\n\\t]+/m', ' ', $sValue);
     $aEncodeArray = array('');
     $aMatch = array();
     \preg_match_all('/=\\?[^\\?]+\\?[q|b|Q|B]\\?[^\\?]*(\\?=)/', $sValue, $aMatch);
     if (isset($aMatch[0]) && \is_array($aMatch[0])) {
         for ($iIndex = 0, $iLen = \count($aMatch[0]); $iIndex < $iLen; $iIndex++) {
             if (isset($aMatch[0][$iIndex])) {
                 $iPos = @\strpos($aMatch[0][$iIndex], '*');
                 if (false !== $iPos) {
                     $aMatch[0][$iIndex][0] = \substr($aMatch[0][$iIndex][0], 0, $iPos);
                 }
             }
         }
         $aEncodeArray = $aMatch[0];
     }
     $aParts = array();
     $sMainCharset = '';
     $bOneCharset = true;
     for ($iIndex = 0, $iLen = \count($aEncodeArray); $iIndex < $iLen; $iIndex++) {
         $aTempArr = array('', $aEncodeArray[$iIndex]);
         if ('=?' === \substr(\trim($aTempArr[1]), 0, 2)) {
             $iPos = \strpos($aTempArr[1], '?', 2);
             $aTempArr[0] = \substr($aTempArr[1], 2, $iPos - 2);
             $sEncType = \strtoupper($aTempArr[1][$iPos + 1]);
             switch ($sEncType) {
                 case 'Q':
                     $sHeaderValuePart = \str_replace('_', ' ', $aTempArr[1]);
                     $aTempArr[1] = \quoted_printable_decode(\substr($sHeaderValuePart, $iPos + 3, \strlen($sHeaderValuePart) - $iPos - 5));
                     break;
                 case 'B':
                     $sHeaderValuePart = $aTempArr[1];
                     $aTempArr[1] = \MailSo\Base\Utils::Base64Decode(\substr($sHeaderValuePart, $iPos + 3, \strlen($sHeaderValuePart) - $iPos - 5));
                     break;
             }
         }
         if (0 < \strlen($aTempArr[0])) {
             $sCharset = 0 === \strlen($sForcedIncomingCharset) ? $aTempArr[0] : $sForcedIncomingCharset;
             $sCharset = \MailSo\Base\Utils::NormalizeCharset($sCharset, true);
             if ('' === $sMainCharset) {
                 $sMainCharset = $sCharset;
             } else {
                 if ($sMainCharset !== $sCharset) {
                     $bOneCharset = false;
                 }
             }
         }
         $aParts[] = array($aEncodeArray[$iIndex], $aTempArr[1], $sCharset);
         unset($aTempArr);
     }
     for ($iIndex = 0, $iLen = \count($aParts); $iIndex < $iLen; $iIndex++) {
         if ($bOneCharset) {
             $sValue = \str_replace($aParts[$iIndex][0], $aParts[$iIndex][1], $sValue);
         } else {
             if (\MailSo\Base\Enumerations\Charset::UTF_8 !== $aParts[$iIndex][2] && \MailSo\Base\Utils::IsUtf8($aParts[$iIndex][1])) {
                 $aParts[$iIndex][2] = \MailSo\Base\Enumerations\Charset::UTF_8;
             }
             $sValue = \str_replace($aParts[$iIndex][0], \MailSo\Base\Utils::ConvertEncoding($aParts[$iIndex][1], $aParts[$iIndex][2], \MailSo\Base\Enumerations\Charset::UTF_8), $sValue);
         }
     }
     if ($bOneCharset && 0 < \strlen($sMainCharset)) {
         if (\MailSo\Base\Enumerations\Charset::UTF_8 !== $sMainCharset && \MailSo\Base\Utils::IsUtf8($sValue)) {
             $sMainCharset = \MailSo\Base\Enumerations\Charset::UTF_8;
         }
         $sValue = \MailSo\Base\Utils::ConvertEncoding($sValue, $sMainCharset, \MailSo\Base\Enumerations\Charset::UTF_8);
     }
     return $sValue;
 }
예제 #4
0
 /**
  * @return string
  */
 public function Test()
 {
     $sResult = '';
     try {
         $this->SyncDatabase();
         if (0 >= $this->getVersion($this->sDsnType . '-ab-version')) {
             $sResult = 'Unknown database error';
         }
     } catch (\Exception $oException) {
         $sResult = $oException->getMessage();
         if (!empty($sResult) && !\MailSo\Base\Utils::IsAscii($sResult) && !\MailSo\Base\Utils::IsUtf8($sResult)) {
             $sResult = @\utf8_encode($sResult);
         }
         if (!\is_string($sResult) || empty($sResult)) {
             $sResult = 'Unknown database error';
         }
     }
     return $sResult;
 }