Quoted-printable処理

\n"); if(!isset($_POST['message']) || empty($_POST['message'])) { // パラメータに何も指定されなかったとき /* 入力フォームを表示する */ print("
\n"); print("\t\n"); print("\t\n"); print("\t\n"); print("\t\n"); print("\t\n"); print("\t
処理選択Decode Encode(SJIS) Encode(ISO-2022-JP) Encode(UTF8) Encode(EUC) 
利用関数PHPビルトイン関数を利用しない
本文
\n"); print("
\n"); } else { // 入出力サイズを結果として表示するための変数初期化 $nInputBytes = 0; $nOutputBytes = 0; // 利用した関数を表示するため $strFuncName = ''; // テキストボックスに入力された、変換対象の文字列 $strMessage = $_POST['message']; // PHP標準関数を無効化するスイッチ $strSwDisableFunc = ''; if(isset($_POST['func']) || !empty($_POST['func'])) { if($_POST['func'] == 'disable_builtin') $strSwDisableFunc = 'disable_builtin'; } // 入力サイズ(結果表示で用いるため) $nInputBytes = mb_strlen($strMessage); if($_POST['type'] == 'decode') { // デコード $strFuncName = func_decode($strMessage, $strSwDisableFunc); } else { // エンコード $strFuncName = func_encode($strMessage, $_POST['type'], $strSwDisableFunc); } // 出力サイズ(結果表示で用いるため) $nOutputBytes = mb_strlen($strMessage); // HTML特殊文字をエスケープする $strMessage = htmlspecialchars($strMessage); // 結果を画面表示 printf("

入力文字数 : %d bytes, 出力文字数 : %d bytes, 利用関数 : %s

\n", $nInputBytes, $nOutputBytes, $strFuncName); print("

-------------------------------

\n"); print("
\n".$strMessage."\n
\n"); } print("入力画面を再表示する\n"); // デコード関数 function func_decode(&$str, $strFunc) { // 利用した関数名 $strFuncName = ''; if($strFunc == 'disable_builtin') { // 強制的にPHPビルトイン関数を無効化する $str = mb_convert_encoding(func_decode_self($str), 'UTF8', 'auto'); $strFuncName = 'オリジナル関数'; } else if(function_exists('quoted_printable_decode')) { $str = mb_convert_encoding(quoted_printable_decode($str), 'UTF8', 'auto'); $strFuncName = 'quoted_printable_decode'; } else { $str = mb_convert_encoding(func_decode_self($str), 'UTF8', 'auto'); $strFuncName = 'オリジナル関数(ビルトイン関数無し)'; } // 不要なスラッシュを除去 $str = stripslashes($str); return($strFuncName); } // エンコード関数 function func_encode(&$str, $strMode, $strFunc) { // 利用した関数名 $strFuncName = ''; // 文字コードの指定 $strCode = 'SJIS'; switch($strMode) { case 'encode_sjis': $strCode = 'SJIS'; break; case 'encode_iso2022jp': $strCode = 'ISO-2022-JP'; break; case 'encode_utf8': $strCode = 'UTF8'; break; case 'encode_euc': $strCode = 'EUC-JP'; break; } if($strFunc == 'disable_builtin') { // 強制的にPHPビルトイン関数を無効化する $str = func_encode_self(mb_convert_encoding($str,$strCode,'auto')); $strFuncName = 'オリジナル関数'; } else if(function_exists('quoted_printable_encode')) { $str = quoted_printable_encode(mb_convert_encoding($str,$strCode,'auto')); $strFuncName = 'quoted_printable_encode'; } else if(function_exists('imap_8bit')) { $str = imap_8bit(mb_convert_encoding($str,$strCode,'auto')); $strFuncName = 'imap_8bit'; } else { $arrEncodeSupport = mb_list_encodings(); if(array_search('Quoted-Printable', $arrEncodeSupport) != FALSE) { $str = mb_convert_encoding(mb_convert_encoding($str,$strCode,'auto'), 'Quoted-Printable', $strCode); $strFuncName = 'mb_convert_encoding'; } else { $str = func_encode_self(mb_convert_encoding($str,$strCode,'auto')); $strFuncName = 'オリジナル関数(ビルトイン関数無し)'; } } return($strFuncName); } // デコード関数(PHPの関数を使わないバージョン) function func_decode_self($str) { $out = preg_replace('/=\r?\n/', '', $str); $out = preg_replace('/=([A-F0-9]{2})/e', "chr(hexdec ('$1'))" , $out); return trim($out); } // エンコード関数(PHPの関数を使わないバージョン) function func_encode_self($str) { $crlf="\r\n"; $str=trim($str); $lines = preg_split("/(\r\n|\n|\r)/s", $str); $out = ''; $temp = ''; foreach ($lines as $line) { for ($j = 0; $j < strlen($line); $j++) { $char = substr ( $line, $j, 1 ); $ascii = ord ( $char ); if ( $ascii < 32 || $ascii == 61 || $ascii > 126 ) { $char = '=' . strtoupper ( dechex( $ascii ) ); } if ( ( strlen ( $temp ) + strlen ( $char ) ) >= 76 ) { $out .= $temp . '=' . $crlf; $temp = ''; } $temp .= $char; } } $out .= $temp; return trim ( $out ); } ?>