Encode-JP-Mobile
view release on metacpan or search on metacpan
lib/Encode/JP/Mobile/Cookbook.pod view on Meta::CPAN
my $agent = HTTP::MobileAgent->new;
my $encoding = detect_encoding($agent);
sub detect_encoding {
my $agent = shift;
if ($agent->is_docomo) {
return $agent->xhtml_compliant ? 'x-utf8-docomo' : 'x-sjis-docomo';
} elsif ($agent->is_ezweb) {
return 'x-sjis-kddi-auto';
} elsif ($agent->is_vodafone) {
return $agent->is_type_3gc ? 'x-utf8-softbank' : 'x-sjis-softbank';
} elsif ($agent->is_airh_phone) {
return 'x-sjis-airh';
} else { # $agent->is_non_mobile ã«ã¯ utf-8 ã¨ãã¾ã
return 'utf-8';
}
}
=head2 ããã«æ¥½ããã
ãã®ä¾ã® C<detect_encoding()> ãµãã«ã¼ãã³ãæ¯åã³ãã¼ããå¿
è¦ã¯ããã¾ããããã㯠L<HTTP::MobileAgent::Plugin::Charset> ã¨ããã¢ã¸ã¥ã¼ã«ã¨ãã¦ããã±ã¼ã¸åããã¦ãã¾ãããããå©ç¨ããã¨ã...
use HTTP::MobileAgent;
use HTTP::MobileAgent::Plugin::Charset;
my $agent = HTTP::MobileAgent->new;
my $encoding = $agent->encoding; # ããã ãï¼
=head2 å©ç¨ã¤ã¡ã¼ã¸
ä¸è¨ããµã¾ãããã£ãªã¢éã§ decode/encode ããã¤ã¡ã¼ã¸ãã¤ãããããç°¡ç¥åãã CGI ã¹ã¯ãªããã示ãã¾ãã
use CGI;
use HTTP::MobileAgent;
use HTTP::MobileAgent::Plugin::Charset;
use Encode;
use Encode::JP::Mobile;
my $cgi = CGI->new;
my $agent = HTTP::MobileAgent->new;
my $encoding = $agent->encoding;
if ($cgi->request_method eq 'POST') {
# 端æ«ããã®å
¥åã¯ç«¯æ«ã«åãããã¨ã³ã³ã¼ãã£ã³ã°ã§ decode ãä»»æã®å¦çãè¡ã...
my $data = decode($encoding, $cgi->param('text'));
# DB ãªã©ã¸ã¯ utf-8 ã§ä¿å.
open(my $fh, '>>', '/tmp/test.txt');
print {$fh} encode('utf-8', $data);
close $fh;
}
# DB ãªã©ããã¯æ®éã« utf-8 ã§åãåºãä»»æã®å¦çãè¡ã...
open(my $fh, '<', '/tmp/test.txt');
my $data = decode('utf-8', join "", <$fh>);
# åºåããæã¯ã端æ«ã«åãããã¨ã³ã³ã¼ãã£ã³ã°ã§ encode ãã¦ããã¾ã.
my $charset = $encoding =~ /sjis/ ? 'shift_jis' : 'utf-8';
my $html = <<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=$charset" />
</head>
<body>
<form action="$ENV{SCRIPT_NAME}" method="POST">
<input type="text" name="text" />
<input type="submit">
</form>
<p>$data</p>
</body>
</html>
HTML
;
print $cgi->header(-charset => $charset);
print encode($encoding, $html, Encode::JP::Mobile::FB_CHARACTER);
ãã®ä¾ã®ããã« C<Encode::encode()> ã§ L<Encode::JP::Mobile::FB_CHARACTER|Encode::JP::Mobile::Fallback> ã使ããã¨ã§ãçµµæå => çµµæåã®ç¸äºå¤æã ãã§ãªã çµµæå => æå ã®ç¸äºå¤æãè¡ãªããã¨ãã§ãã...
=head2 ã¡ã¼ã«éä¿¡æã®ã¨ã³ã³ã¼ãã£ã³ã°
ã¡ã¼ã«éä¿¡æã®ã¨ã³ã³ã¼ãã£ã³ã°ã¯ html åºåæã¨ã¯å¤§ä½ã®å ´åã§ç°ãªãã¾ããL<Mail::Address::MobileJp> ã使ãã以ä¸ã® C<detect_mail_encoding()> ã®ããã«æ±ºããã¨ããã§ãããã
use Mail::Address::MobileJp;
sub detect_mail_encoding {
my $mobile_to_address = shift;
my $code =
( is_imode($mobile_to_address) ) ? 'x-sjis-docomo' :
( is_softbank($mobile_to_address) ) ? 'x-utf8-softbank' :
( is_ezweb($mobile_to_address) ) ? 'x-sjis-kddi-auto' :
'x-sjis-docomo' ;
return $code;
}
=head1 PC åãã«çµµæåã代æ¿è¡¨ç¾ãã
PC åãã«æºå¸¯ã§å
¥åãããçµµæåã [å°é¢¨] ã¨ãã£ãããã«æåã§ä»£æ¿è¡¨ç¾ããã«ã¯ãL<':props' ãªãã·ã§ã³|Encode::JP::Mobile/UNICODE_PROPERTIES>㨠L<Encode::JP::Mobile::Character> ã使ã以ä¸ã®ããã«å
¨çµµ...
use Encode::JP::Mobile ':props';
use Encode::JP::Mobile::Charnames;
$html =~ s{(\p{InMobileJPPictograms})}{
my $char = Encode::JP::Mobile::Character->from_unicode(ord $1);
sprintf '[%s]', $char->name;
}ge;
print encode('utf-8', $html); # ä¾ï¼ãã天æ°[太é½]
=head2 表ç¾ãå¤ãã
ä¸ã®æ¹æ³ã 㨠PC ã¦ã¼ã¶ã¼ã¸æå³ãä¼ãããã¨ã¯ã§ãã¾ãããC<< $char->name >> ã¯ãã£ãªã¢ã®ãã¼ã¸ã®çµµæåä¸è¦§è¡¨ã«ããååãè¿ããã®ãªã®ã§ã[ä¸¸ã«æãç·] ã [ç¾½ã®ã¯ãããæ] ã¨ãã£ãè...
ãããã«ã¤ãã¦ãå¥ã®è¡¨ç¾ã«ãããå ´åã¯ä»¥ä¸ã®ããã«èªåã§ããããæã¡å¤æããã¨ããã§ãããã
use utf8;
my $fallback_name = {
E => {
( run in 2.615 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )