【 各設定について 】
● 使用例
require 'JMClib.pl'; # .pl(package) の場合
use JMClib qw(Conv Form);
# .pm (module) の場合
( qw()内にて他に指定出来るもの : Content Conthtml ClientCheck xdata UserEnv TimeGet )
----------------
※ Code, Mime 変換
----------------
$JMC = JMClib::Conv("A", "B", "C", "D", "E"); # .pl(package) の場合
$JMC = Conv("A", "B", "C", "D", "E"); # .pm (module) の場合
戻り値参照 $data = $JMC->data(datcv);
----------------
※ Form Data 取得
----------------
$JMC = JMClib::Form("B", "C", "D", "E"); # .pl(package) の場合
$JMC = Form("B", "C", "D", "E"); # .pm (module) の場合
戻り値参照
*ハッシュ取得 $key = $JMC->data(key値);
( 但しFileUpデーターは => value値 : $value = $key->[0];
filename値 : $fname = $key->[1]; fileroot値 : $froot = $key->[2]; )
*配列取得 (入力フォームに対してのkey順に取得したい場合)
$ARRA = $JMC->data(array) :
key値 -> $key = $ARRA->[1][0]; value値 -> $value = $ARRA->[1][1];
( 但しFileUpデーターは
key値 : $key = $ARRA->[1][0]; value値 : $value = $ARRA->[1][1];
filename値 : $fname = $ARRA->[1][2]; fileroot値 : $froot = $ARRA->[1][3]; )
# 配列取得時において、部分的にハッシュ取得したい場合 #
# key(name)値の頭に「h_」を付ける #
# 例 : [ h_mode ] #
----------------
※ XML Data 取得
----------------
$JMC = JMClib::Form("B", "C", "D", "E"); # .pl(package) の場合
$JMC = Form("B", "C", "D", "E"); # .pm (module) の場合
戻り値参照 $XmlData = $JMC->xdata(Get, Option);
* Option => 1=Scalar, 2=Value
Get(1) => Data->result = $name = ${$XmlData}[0]; $mail = ${$XmlData}[1];
Get(2) => Data->result->[0] = $name = ${$XmlData}{"name"};
Get(3) => Data->result->mail = $mail = ${$XmlData}[0];
* Option=1 => $mail = $XmlData;
# Get(3)の場合において、配列[0]にて取得される為、Option #
# に1を指定しスカラー値として取得させる為のオプション #
# オプションに2を指定した場合、Getでの最後の指定にValue値 #
# を指定すると、そのValue値検索となります。 #
----------------
※ その他
----------------
MimeTipe参照 $mime = JMClib::Content($filename); (値:Content-Type: image/jpg)
( .pm の場合 $mime = Content($filename); )
コード値参照 $code = $JMC->data(code);
エラー値参照 $error = $JMC->data(error);
タイム値参照 $date = $JMC->data(tmdate); (値:2004/01/01(Thu)08:39:53)
$date = $JMC->data(tmstam); (値:040101083953)
依存文字値参照 $kizcv = $JMC->data(kizcv); (値:機種依存文字)
依存変換値参照 $kizck = $JMC->data(kizck); (値:機種依存文字->変換文字)
データークリア $JMC->free(key値);
データー置き換え $JMC->free(key値, $newdata);
端末調査 $OS = (JMClib::ClientCheck())[0]; ( .pm の場合 $OS = (ClientCheck())[0]; )
PC W => Win, M => Mac,
注意 : Macのみ引き出しているので Linux等は Win判定されます。
携帯 1 => i-mode, 2 or 2b or 2c => SoftBank(旧Vodafone) ※2b:3G(Vodafone), 2c:3G (MOT-XX)
3 or 3b => EZ (※3b:WAP2.0), 4 => AirH", 5 => ASTEL, 6 => L-mode, 7 => H" (PDXGW)
スマホ 10 => iPhone iPod, 11 => Android, 12 => Win Phone 13 => その他
タブレ 20 => iPad, 21 => Android, 22 => Win Touch 23 => その他
※ 尚、スマホ、タブレ判定で下記のような設定箇所があります。( JMClib.pl JMClib.pm )
=====================================================
;# Androidのスマートフォン判定をタブレット判定にする機種番号指定 (複数指定は[ | ]にて指定)
$NoAnSuma = 'A1_07|SC-01C';
※ まれに、AndroidユーザーエージェントにMobileとあってもタブレット機種があります。
その機種番号を設定します。
;# 端末判定不明の Opera Mini(ブラウザ)に対してタブレット判定
;# [ 0:Mobile 1:Tablet 2:別判定 (戻り値 iPhone => 30、Android => 31) ]
$MiniTablet = 0;
※ ユーザーエージェントに Opera Miniがある場合、
Mobile、Tabletの記載が無く判別が付かないのですが、
デフォルトでは、スマートフォン(Mobile)判定しています。任意に設定して下さい。
※ [2] に設定した場合は、戻り値 iPhone => 30、Android => 31 となります。
======================================================
【 注意 】端末側のユーザーエージェント未設定等も含め
スマートフォン・タブレット端末判定に付きまして100%の判定にはなりませんので
大まかな目安としてご利用下さい。
ユーザー環境変数 ( .pm の場合 $xx = UserEnv("xxx") )
AGENT $agent = JMClib::UserEnv("agent");
REFERER $ref = JMClib::UserEnv("ref");
HOST $host = JMClib::UserEnv("host");
IP $addr = JMClib::UserEnv("addr");
# $ENV = JMClib::UserEnv(); #
# 上記のように引数を省略するとハッシュ取得となります #
# 例 : $agent = $ENV->{'agent'}; #
タイムデーター取得 ( .pm の場合 @time = TimeGet("xxx"); )
@time = JMClib::TimeGet($tc);
( $tc => 時間調整 1 = プラス1時間, -1 = マイナス1時間)
$time[0] 秒 $time[1] 分 $time[2] 時 $time[3] 日
$time[4] 月 $time[5] 年 $time[6] 週 (例:Sun)
$time[10] SET1 ( $JMC->data(tmdate)と同じ )
$time[11] SET21 ( $JMC->data(tmstam)と同じ )
HTML MIME SET 取得 ( @htmlmime = Conthtml($lang); )
@htmlmime = JMClib::Conthtml($lang);
( $lang => sjis jis euc u8 u16 )
$htmlmime[0] => Content-Type: text/html; charset=Shift_JIS\n\n
$htmlmime[1] =>
1 各引数指定について
========================
A : In DATA to Convert
========================
===============
B . Out Code
===============
1) JcodeConv => sjis jis euc u8 u16b u16l uhx uhc
2) MimeEncode => b64 uu u7 file
3) URL-Encode => url urlul urlub urlu urle
-----------------------------------------------------
* u8 -> UTF8 * u16b -> UTF16BE * u16l -> UTF16LE
* uhc -> Unicode 10進HTML実体参照 例: 佐
* uhx -> Unicode 16進HTML実体参照 例: 藤
* b64 -> Base64encode * uu -> uuencode * u7 -> UTF7encode
* file-> 引数Cにて b64 uu 指定時に有効 ( 例: ./xxx.tar.gz )
※ 引数Dにて'p'指定があればprintされる
* url -> Unicode以外のURLencode
+ul=u16l, +ub=u16b, +u=u16, +e=u8
===============
C : In Code
===============
1) JcodeConv => sjis jis euc u8 u16b u16l uhx uhc
2) MimeDecode => b64 uu qu u7 file
3) FormParam => form forma form2 form2a (※ XML 頭に[x]をつける)
4) URL-Decode => url urlul urlub urlu urle
-----------------------------------------------------
* uhc uhx url url* -> 上記参照
* b64 -> Base64ecode * uu -> uudecode * qu -> Quotedecode * u7 -> UTF7decode
* file -> 引数D(Option1)の p 指定によりfile指定へprint
引数Cにて b64 uu で有効 ( 例:./xxx.tar.gz )
* form -> FormDataのハッシュ取得, +a=配列で取得, +2=name値もConvert
※ XMLデーター取得は xform 以下同じ (省略可能)
===============
D : Option1 (コード or Mime オプション)
===============
1) Client pot1 => W M D V E A L
2) Jcode pot1 => s j e ub ul uc ux u z h k kk kc kr ka b0 w
3) HTML pot1 => v d dd
4) Mime pot1 => t p n[\d]+ m
-----------------------------------------------------
* W=Win, M=Mac, * D=DoCoMo, * V=vodafone (* E=EZ, * A=ASTEL, * L=L-mode)
PC端末機種依存or携帯端末の絵文字Data処理の際の強制端末指定
(但しカッコ内端末は特にロジック調整はしていません)
* s j e ub ul uc ux u -> sjis jis euc UTF16BE UTF16LE 10進HTML 16進HTML UTF8
引数B変換前にInCodeを違うCodeに変換
※ 但し 引数CがForm*指定においては FormDataのCodeとなるCode指定として
UTFコード及び機種依存文字、カタカナ変換を行う場合には必至項目
# 半角カタカナとEUCの区別がつかないので #
# SJISの際は's'を付ける事をお勧め致します。 #
# UTF8 UTF16共に受け取るデーターがUTF8になる #
# ようですので? [u]を指定の事 #
※ 引数CがMimeDecode指定においては Decodeされた文字のコード変換を行う
場合にその変換前のコードが分かっている場合は指定可能 (Text File)
* z -> 半角カタカナを全角変換 * h -> 全角カタカナを半角変換
* k -> PC端末機種依存文字を表示可能文字に変換(Data取得or漢字は変換無し)
+k=依存文字, +c=依存文字変換, +r = 変換以外の依存文字, +a=両方
* b0 -> UTF16 BOM無付加
* w -> 改行調整(\r\n)
* v -> HTML実体参照 Convert ( 例
進or16進; -> 文字 )
* d -> 携帯絵文字(10進変換) ( dd -> 携帯絵文字削除 )
* t -> FileMimeencode/decodeの際のFileがテキストの際指定
* p -> FilePrint (FormでのUpFileでも有効)
* n[\d]+ -> MimeEncodeの際の折り返し文字数 ( 例: n72 )
* m -> 「=?ISO-2022-JP?B?」と「?=」に囲まれた文字列の戻り値
※ In Codeが sjis jis以外で Option指定が無い場合は jis変換後 encodeされる
===============
E : Option2 (フォーム or 機種依存文字 オプション)
===============
1) Jcode pot2 => s j e ub ul uc ux u b0
2) Form1 pot2 => f[0-9]+k l[0-9]+k & " < > \$ ,
Form2 pot2 => jp gi bm pn mi mp gz zi zh bz hq ht pd do ex
3) etc pot2 => t[0-9]+
-----------------------------------------------------
CodeConvert :
* s j e ub ul uc ux u b0
-> 依存文字Data取得の際のCode指定 (無指定は引数B又は 引数Cでの指定Code)
Form :
* f[0-9]+k -> FormData転送最大量設定 (kbytes指定 例: f600k )
* & " < > \$ , -> 左にある文字がある場合実体参照へ変換 ( 例: < -> < )
* l[0-9]+k -> FileUpLimit (kbytes指定 例: l50k )
以下FileUp許可File指定
pic1 -> jpg(jpe,jpeg) gif bmp png tif(tiff) : 画像関連
pic2 -> psd ai eps pdf : adobe関連
zip -> gz(tar.gz, tgz) zip lzh bz2 hqx bin : 圧縮関連
mof -> doc dot pot oft xls wiz mdz obt xlt wri : Office関連
mult -> avi wav mpg(mpeg) wmv rm ram rpm au aif mid mp3
qt mov swf spl fla dcr class : マルチメディア関連
htm -> htm(html) txt -> テキスト exe -> exe dll : その他
FilePrintの際は、引数Bにて:で区切りルート指定 ( 例: "sjis:./" )
etc :
* t[0-9]+ - Server TimeSet(海外 例: t9 = +9時間, t-9 = -9時間 )
● WEB MAIL 等でのソース例
1. 通常メールの例 (jcode.plと共に利用した例)
$name = '佐藤';
$subje = '題名';
$message = 'テスト送信';
# 「z」半角カタカナがあれば全角カタカナにし「j」jis変換後b64
# 又メールヘッダーのデーターなので「m」も付加します。
$JMC = JMClib::Conv($name, "b64", "", "jmz");
$name = $JMC->datcv;
#以下同じ
$JMC = JMClib::Conv($subje, "b64", "", "jmz");
$subje = $JMC->data(datcv);
Subject: $subje
From: $name <$masmail>
To: $usermail
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp
$message
2. 添付メールの例 (sample.tar.gzを添付した場合の例)
Content-Type: multipart/mixed; boundary=\"------------------------1234567890d\"
This is multipart message in MIME format.
----------------------1234567890
$JMC = JMClib::Conv($message, "jis", "", "z");
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp
$JMC->data(datcv);
----------------------1234567890
$JMC = JMClib::Conv($file_data, "b64");
Content-Transfer-Encoding: base64
Content-Type: application/gzip
Content-Disposition: attachment;
filename="sample.tar.gz
$JMC->data(datcv);
----------------------1234567890--
※ 但し、このような場合はサブルーチンを食わせてスマート?に
した方が良いかもしれない。
print MAIL &DataGet($message, 'jis', 'z');
sub DataGet{
my ($data, $ocode, $opt1) = @_;
my $JMC = JMClib::Conv($data, "$ocode", "", $opt1);
&error() if $JMC->data(error);
$JMC->data(datcv);
}
● 入力フォームでのソース例
$JMC = JMClib::Form(sjis, 'form2a', 'z', 'pic1pic2zip');
$mode = $JMC->data(mode);
$type = $JMC->data(type);
$FORM = $JMC->data(array); # 配列取得したデーター
$key1 = $FORM->[0][0]; $value1 = $FORM->[0][1];
$key2 = $FORM->[1][0]; $value2 = $FORM->[1][1];
$key3 = $FORM->[2][0]; $value3 = $FORM->[2][1];
・ ・
・ ・
( *$FORM = $JMC->data(array);
$key1 = $FORM[0][0]; $value1 = $FORM[0][1]; でも同じ )
※ 引数D の「z」は半角カタカナを全角にして取得。
※ 引数E の「pic1pic2zip」は画像関連と圧縮ファイルのアップを許可。
● XML データー取得でのソース例
サンプルXML
<data>
<user name="sato" id="0001">
<regist>2004/01/15</regist>
<regist>2003/10/27</regist>
<regist>2002/03/18</regist>
</user>
<user name="saito" id="0002">
<regist>2003/08/27</regist>
</user>
<user name="suzuki" id="0003">
<regist>2003/09/05</regist>
<regist>2003/05/21</regist>
</user>
</data>
sub Request{
$_ = shift;
$JMC = JMClib::Form("sjis");
$Get = $JMC->xdata("data->user"); # 例1
$Get = $JMC->xdata("data->user->[0]"); # 例2
$Get = $JMC->xdata("data->sata", 2); # 例3
$Get = $JMC->xdata("data->user->name"); # 例4
( $Get = $JMC->xdata(Get, Option); )
}
※ ルーチンFormには、$_としてデフォルト入力として下さい。
※ Get指定にて、最後に配列指定をする場合にて
※ 例3のValue値指定の場合は、同じValueがあっても
最初の一致しか取得出来ないのでご注意下さい。
中間にも配列データーがある場合はその配列指定が必要。
例 : $JMC->xdata("data->user->regist"); ○
$JMC->xdata("data->user->regist->[0]"); ×
$JMC->xdata("data->user->[0]->regist->[0]"); ○
例1 $id = ${$Get}[1]->{id}; ($Get->[1]->{id}; でも同じ)
$Get =
[ { name => sato,
id => 0001,
regist=> [ 2004/01/15, 2003/10/27, 2002/03/18 ]
},
{ name => saito,
id => 0002,
regist=> [ 2003/08/27 ]
},
{ name => suzuki,
id => 0003,
regist=> [ 2003/09/05, 2003/05/21 ]
}
];
例2 $id = ${$Get}{id}; ($Get->{id}; でも同じ)
$Get = { name => "sato",
id => "0001",
regist=> [ "2004/01/15", "2003/10/27", "2002/03/18" ]
};
例3 ※ 例3は例2と同じ
例4
$Get = [ sato, saito, suzuki ];