Perl備忘録 -文字列成型-
掲示板CGIなどユーザが入力した文字を使う場合、文字化けを防いだり処理に適合させるため、文字列成型が必要となる事がある。
・半角カナは文字化けする事があるため、全角カナに変換する方が無難である(Shift-JISの場合)。
&jcode'h2z_sjis(\$sorce); #半角カナ→全角カナ
※ jcode.plが必要
・入力内容をファイル名にする等、英数字を半角で統一したい場合
local($han) = "0123456789"
."abcdefghijklmnopqrstuvwxyz"
."ABCDEFGHIJKLMNOPQRSTUVWXYZ";
local($zen) = "0123456789"
."abcdefghijklmnopqrstuvwxyz"
."ABCDEFGHIJKLMNOPQRSTUVWXYZ";
&jcode'tr(*sorce,$zen,$han); #全角英数→半角英数
・改行コードはHTMLに出力しても表示上の改行にならないので、改行を表すbrタグに変換する
#改行コードを変換
$sorce =~ s/\r\n/<br>/g;
$sorce =~ s/\n/<br>/g;
$sorce =~ s/\r/<br>/g;
・入力内容にHTML上意味のある文字(タグなど)を含むと、表示を崩したりセキュリティの問題があるのでそれぞれを表す記号(&xxx)に変換する。
#HTMLで意味のある文字列を変換する
$sorce =~ s/"/"/g;
$sorce =~ s/&/&/g;
$sorce =~ s/</</g;
$sorce =~ s/>/>/g;
・前後の全角半角スペースを削除(Shift-JISの場合)
local($1) = "";
local($Zspace_sjis) = '(?:\x81\x40)';
local($oneByte_sjis) = '[\x00-\x7F\xA1-\xDF]'; #1バイト SJIS文字
local($twoBytes_sjis) =
'(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; #2バイト SJIS文字
local($character_sjis) = "(?:$oneByte_sjis|$twoBytes_sjis)";
$sorce =~ s/^(?:\s|$Zspace_sjis)+//o; #前
$sorce =~ s/^($character_sjis*?)(?:\s|$Zspace_sjis)+$/$1/o; #後
※ jcode.plが必要
おまけ
・数字3桁ごとに","(カンマ)を入れる(EX.10000→10,000)
while($sorce =~ s/(.*\d)(\d\d\d)/$1,$2/){}
| 固定リンク | コメント (0) | トラックバック (0)






最近のコメント