人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlについての質問です。

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

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

よろしくお願いします。

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:Perl タグ テキスト データ 危険
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●27ポイント

?????? - search.cpan.org

Jcode の tr を使うとか。

◎質問者からの返答

ありがとうございます。


2 ● arcana
●27ポイント

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

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

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

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


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

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

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


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


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

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

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

◎質問者からの返答

ありがとうございます。

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

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

ありがとうございました


3 ● まきのっぴ
●26ポイント ベストアンサー

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」と「デス」が削除されて表示される、という感じでしょうか。

◎質問者からの返答

ありがとうございます。

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ