半角/全角の変換
掲示板の利用者が、ほとんど初心者で、
機種依存文字、半角カタカナの使用に
まったく躊躇しない人達なので、
最低でも、半角カタカナは全角に変換しようと思います。
機種依存文字、半角カタカナの使用に
まったく躊躇しない人達なので、
最低でも、半角カタカナは全角に変換しようと思います。
更に、全角の英数字などを使うので、
検索機能が正常に機能しなくなってしまいます。
そこで、英数記号は半角に変換します。
検索機能が正常に機能しなくなってしまいます。
そこで、英数記号は半角に変換します。
調べた限りでは、jcode.plのh2zでできそうです。
&jcode::h2z_sjis( \$val); # 半角カタカナを全角カタカナに変換
&jcode::convert( \$val, 'sjis' ); # 外部モジュールjcode.plのconvert関数呼び出し
これで、ShiftJISの半角カナを全角カナに変換できました。
&jcode::convert( \$val, 'sjis' ); # 外部モジュールjcode.plのconvert関数呼び出し
次に、全角英数記号の半角化です。
どうやら、こちらの方が難しそうです。
変換後にShift_JISで返すサブルーチンを作りました。
{
my ($str) = @_; # 引数 変換対象文字列
my ($zw) = &jcode::euc('0-9A-Za-z');
my ($hw) = &jcode::euc('0-9A-Za-z');
my ($zg) = &jcode::euc('@!”#$%&’()=^¥|{}:;+*?_/<>.,-');
my ($hg) = &jcode::euc('@!"#$%&\'()=^\\|{}:;+*?_/<>.,-');
$str = &jcode::euc($str);
&jcode::tr(\$str, $zw, $hw);
&jcode::tr(\$str, $zg, $hg);
return &jcode::sjis($str);
}
EUCかJISでないとならないようなのですが、
コードはWindowsで書いたので、Shift_JISです。
まぁ、そうでなくても明示的に文字列変数を
EUCにしておく事は意味があるでしょう。
あとは、trに文字列と、置換前の文字クラスと
置換後の文字クラスを渡してやれば成功です。
ただし、記号を書く場合の注意ですが、
マイナス(-)は、最後に書く必要があります。
これは、文字クラスの
範囲用のマイナスとの区別がつかないからだと思います。
つまり0-9と書いた場合、
数字を表すと思いますが、
この真ん中のマイナスとの区別がつかず、
正しく変換されません。
そのため、マイナス記号は文字列の最後に書きます。
どうやら、こちらの方が難しそうです。
変換後にShift_JISで返すサブルーチンを作りました。
###############################
#
# 全角の英数記号を半角にする
#
sub z2h_alphabet#
# 全角の英数記号を半角にする
#
{
my ($str) = @_; # 引数 変換対象文字列
my ($zw) = &jcode::euc('0-9A-Za-z');
my ($hw) = &jcode::euc('0-9A-Za-z');
my ($zg) = &jcode::euc('@!”#$%&’()=^¥|{}:;+*?_/<>.,-');
my ($hg) = &jcode::euc('@!"#$%&\'()=^\\|{}:;+*?_/<>.,-');
$str = &jcode::euc($str);
&jcode::tr(\$str, $zw, $hw);
&jcode::tr(\$str, $zg, $hg);
return &jcode::sjis($str);
}
コードはWindowsで書いたので、Shift_JISです。
まぁ、そうでなくても明示的に文字列変数を
EUCにしておく事は意味があるでしょう。
あとは、trに文字列と、置換前の文字クラスと
置換後の文字クラスを渡してやれば成功です。
ただし、記号を書く場合の注意ですが、
マイナス(-)は、最後に書く必要があります。
これは、文字クラスの
範囲用のマイナスとの区別がつかないからだと思います。
つまり0-9と書いた場合、
数字を表すと思いますが、
この真ん中のマイナスとの区別がつかず、
正しく変換されません。
そのため、マイナス記号は文字列の最後に書きます。
| 固定リンク
「Perl」カテゴリの記事
- LWP::Simpleのmirrorをgetに変更した。掲示板監視スクリプト(2014.01.25)
- XMLRPC::Liteで更新Ping(2009.05.29)
- 楽天APIで自動アフィリエイトリンク作成(2009.05.19)
- モジュールをインストールしてみる(2008.01.22)
- Perlでコールバック サブルーチンの引数としてサブルーチンの参照を渡す(2007.11.26)
コメント