Perlについての質問です。


テキストデータの中に、半角文字(タグ、などの危険文字含む)と全角文字が存在していた場合、強制的に半角文字を削除してしまう方法はないでしょうか?

文字コードを統一して、いろいろやってみましたが、なかなかうまくいきません。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:
  • 終了:2007/02/20 19:25:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pmakino No.3

回答回数358ベストアンサー獲得回数30

ポイント26pt

ASCII 文字はコードポイント 20~7E、半角カナはコードポイント FF61~FF9F にあるので (Unicode対応 文字コード表)、

仮に元の文字列が Shift_JIS だったとしたら、

use Encode; # Encode モジュールを使う

my $text = 'Perlについての質問デス。'; # 元の文字列

$text = decode('Shift_JIS', $text); # UTF-8 文字列に変換

$text =~ s/[\x{20}-\x{7E}\x{FF61}-\x{FF9F}]//g; # 半角文字削除

print encode('Shift_JIS', $text); # Shift_JIS バイト列に戻して出力

という感じで「Perl」と「デス」が削除されて表示される、という感じでしょうか。

id:zachouR

ありがとうございます。

SJISに限る場合にこれは大変有効ですね!これは利用できそうです。

とりあえず、この操作でタグとか一気にとれてしまうでしょうか?

ありがとうございました。

2007/02/17 21:28:02

その他の回答2件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント27pt

名前 - search.cpan.org

Jcode の tr を使うとか。

id:zachouR

ありがとうございます。

2007/02/16 20:57:21
id:arcana No.2

回答回数120ベストアンサー獲得回数10

ポイント27pt

Perl で作成されている掲示板のような、一般的に Web で入力されたデータをそのまま表示すると危険、みたいなケースの場合、

・<> 文字をエンコードする。

・半角カナを全角カナに変換する。

などの手法で対応されていると思います。


タグ記号などは下記の手法で、エンコードできます。

$_ =~s/</&lt;/g;

$_ =~s/>/&gt;/g;


また、半角カナなどの変換には Jcode を用いた変換が一般的です。


Perl でプログラムする際に重宝するメモサイトが下記です。

一通り眺めてみれば、やりたいことが実現できるかもしれません。

http://www.din.or.jp/~ohzaki/perl.htm

id:zachouR

ありがとうございます。

参考にさせていただきます。

いろいろとがんばっていますが、まだまだですね、自分は(;;)

ありがとうございました

2007/02/17 00:19:17
id:pmakino No.3

回答回数358ベストアンサー獲得回数30ここでベストアンサー

ポイント26pt

ASCII 文字はコードポイント 20~7E、半角カナはコードポイント FF61~FF9F にあるので (Unicode対応 文字コード表)、

仮に元の文字列が Shift_JIS だったとしたら、

use Encode; # Encode モジュールを使う

my $text = 'Perlについての質問デス。'; # 元の文字列

$text = decode('Shift_JIS', $text); # UTF-8 文字列に変換

$text =~ s/[\x{20}-\x{7E}\x{FF61}-\x{FF9F}]//g; # 半角文字削除

print encode('Shift_JIS', $text); # Shift_JIS バイト列に戻して出力

という感じで「Perl」と「デス」が削除されて表示される、という感じでしょうか。

id:zachouR

ありがとうございます。

SJISに限る場合にこれは大変有効ですね!これは利用できそうです。

とりあえず、この操作でタグとか一気にとれてしまうでしょうか?

ありがとうございました。

2007/02/17 21:28:02

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません