コード例 #1
0
ファイル: mb-emulator.php プロジェクト: hatone/Nucleus-v3.64
function _sub_quoted_printable_encode($str, $encoding, $maxline, $linefeed)
{
    global $mbemu_internals;
    switch ($e = $mbemu_internals['encoding'][$encoding]) {
        case 0:
            //ascii
        //ascii
        case 1:
            //euc-jp
        //euc-jp
        case 2:
            //shift-jis
        //shift-jis
        case 4:
            //utf-8
            $max = preg_match_all('/' . $mbemu_internals['regex'][$e] . '/', $str, $allchars);
            break;
        case 3:
            //jis
            $max = preg_match_all('/' . $mbemu_internals['regex'][3] . '/', $str, $allchunks, PREG_SET_ORDER);
            // �����킲�Ƃ̔z��ɕ���
            $st = '';
            // quoted printable�ϊ���̕�����
            $len = $maxline;
            // ���̍s�ɒlj��”\�ȃo�C�g��
            $needterminate = FALSE;
            //�Ō�ɃG�X�P�[�v�V�[�P���X���K�v���ǂ���
            for ($i = 0; $i < $max; ++$i) {
                if (ord($allchunks[$i][1])) {
                    //�p���Ƀ}�b�`
                    if ($needterminate) {
                        $st .= '=1B=28B';
                        $len -= 7;
                    }
                    $tmparr = unpack("C*", $allchunks[$i][1]);
                    foreach ($tmparr as $char) {
                        $tmp = _sub_qponechar(chr($char), $l);
                        if ($len < $l) {
                            $st .= $linefeed;
                            $len = $maxline;
                        }
                        $st .= $tmp;
                        $len -= $l;
                    }
                    $needterminate = FALSE;
                } elseif (ord($allchunks[$i][2])) {
                    //�����Ƀ}�b�`
                    $maxchars = preg_match_all("/../", substr($allchunks[$i][0], 3), $allchars);
                    $tmp = _sub_qponechar($allchars[0][0], $l);
                    if ($len < 14 + $l) {
                        if ($needterminate) {
                            $st .= '=1B=28B';
                        }
                        $st .= $linefeed;
                        $len = $maxline;
                    }
                    $st .= '=1B=24B';
                    $len -= 7;
                    for ($j = 0; $j < $maxchars; ++$j) {
                        $tmp = _sub_qponechar($allchars[0][$j], $l);
                        if ($len < $l + 7) {
                            $st .= '=1B=28B' . $linefeed . '=1B=24B';
                            $len = $maxline - 7;
                        }
                        $st .= $tmp;
                        $len -= $l;
                    }
                    $needterminate = TRUE;
                } elseif (ord($allchunks[$i][3])) {
                    //���p�J�i�Ƀ}�b�`
                    $max = preg_match_all("/./", $allchunks[$i][3], $allchars);
                    $tmp = _sub_qponechar($allchars[0][0], $l);
                    if ($len < 14 + $l) {
                        if ($needterminate) {
                            $st .= '=1B=28B';
                        }
                        $st .= $linefeed;
                        $len = $maxline;
                    }
                    $st .= '=1B=28I';
                    $len -= 7;
                    for ($j == 0; $j < $max; ++$j) {
                        $tmp = _sub_qponechar($allchars[0][$j], $l);
                        if ($len < $l + 7) {
                            $st .= '=1B=28B' . $linefeed . '=1B=28I';
                            $len = $maxline - 7;
                        }
                        $st .= $tmp;
                        $len -= $l;
                    }
                    $needterminate = TRUE;
                }
            }
            if ($needterminate) {
                $st .= '=1B=28B';
            }
            $st .= $linefeed;
            return $st;
    }
    $st = '';
    // quoted printable�ϊ���̕�����
    $len = $maxline;
    // ���̍s�ɒlj��”\�ȃo�C�g��
    for ($i = 0; $i < $max; ++$i) {
        $tmp = _sub_qponechar($allchars[0][$i], $l);
        if ($l > $len) {
            $st .= $linefeed;
            $len = $maxline;
        }
        $st .= $tmp;
        $len -= $l;
    }
    $st .= $linefeed;
    return $st;
}
コード例 #2
0
ファイル: mb-emulator.php プロジェクト: kaz6120/P_BLOG
function _sub_quoted_printable_encode($str, $encoding, $maxline, $linefeed)
{
    global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
    switch ($_mb_encoding[$encoding]) {
        case 0:
            //ascii
            $allchars[0] = unpack("c*", $str);
            $max = count($allchars[0]);
            break;
        case 1:
            //euc-jp
            $max = preg_match_all("/{$euc_match}/", $str, $allchars);
            break;
        case 2:
            //shift-jis
            $max = preg_match_all("/{$sjis_match}/", $str, $allchars);
            break;
        case 4:
            //utf-8
            $max = preg_match_all("/{$utf8_match}/", $str, $allchars);
            break;
        case 3:
            //jis
            $jis_match = "(?:^|\\(B)([^]*)|{$B}([^]*)|\\(I([^]*)";
            $max = preg_match_all("/{$jis_match}/", $str, $allchunks, PREG_SET_ORDER);
            // 文字種ごとの配列に分解
            $st = '';
            // quoted printable変換後の文字列
            $len = $maxline;
            // その行に追加可能なバイト数
            $needterminate = FALSE;
            //最後にエスケープシーケンスが必要かどうか
            for ($i = 0; $i < $max; ++$i) {
                if (ord($allchunks[$i][1])) {
                    //英数にマッチ
                    if ($needterminate) {
                        $st .= '=1B=28B';
                        $len -= 7;
                    }
                    $tmparr = unpack("C*", $allchunks[$i][1]);
                    foreach ($tmparr as $char) {
                        $tmp = _sub_qponechar(chr($char), $l);
                        if ($len < $l) {
                            $st .= $linefeed;
                            $len = $maxline;
                        }
                        $st .= $tmp;
                        $len -= $l;
                    }
                    $needterminate = FALSE;
                } elseif (ord($allchunks[$i][2])) {
                    //漢字にマッチ
                    $maxchars = preg_match_all("/../", substr($allchunks[$i][0], 3), $allchars);
                    $tmp = _sub_qponechar($allchars[0][0], $l);
                    if ($len < 14 + $l) {
                        if ($needterminate) {
                            $st .= '=1B=28B';
                        }
                        $st .= $linefeed;
                        $len = $maxline;
                    }
                    $st .= '=1B=24B';
                    $len -= 7;
                    for ($j = 0; $j < $maxchars; ++$j) {
                        $tmp = _sub_qponechar($allchars[0][$j], $l);
                        if ($len < $l + 7) {
                            $st .= '=1B=28B' . $linefeed . '=1B=24B';
                            $len = $maxline - 7;
                        }
                        $st .= $tmp;
                        $len -= $l;
                    }
                    $needterminate = TRUE;
                } elseif (ord($allchunks[$i][3])) {
                    //半角カナにマッチ
                    $max = preg_match_all("/./", $allchunks[$i][3], $allchars);
                    $tmp = _sub_qponechar($allchars[0][0], $l);
                    if ($len < 14 + $l) {
                        if ($needterminate) {
                            $st .= '=1B=28B';
                        }
                        $st .= $linefeed;
                        $len = $maxline;
                    }
                    $st .= '=1B=28I';
                    $len -= 7;
                    for ($j == 0; $j < $max; ++$j) {
                        $tmp = _sub_qponechar($allchars[0][$j], $l);
                        if ($len < $l + 7) {
                            $st .= '=1B=28B' . $linefeed . '=1B=28I';
                            $len = $maxline - 7;
                        }
                        $st .= $tmp;
                        $len -= $l;
                    }
                    $needterminate = TRUE;
                }
            }
            if ($needterminate) {
                $st .= '=1B=28B';
            }
            $st .= $linefeed;
            return $st;
    }
    $st = '';
    // quoted printable変換後の文字列
    $len = $maxline;
    // その行に追加可能なバイト数
    for ($i = 0; $i < $max; ++$i) {
        $tmp = _sub_qponechar($allchars[0][$i], $l);
        if ($l > $len) {
            $st .= $linefeed;
            $len = $maxline;
        }
        $st .= $tmp;
        $len -= $l;
    }
    $st .= $linefeed;
    return $st;
}