WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:全角スペースの除去(Perl)

0:[投稿] windows [2004/03/17 14:21 ][環境:IE6,w2k unix apache plala]

掲示板等のフォームから受け取った値の中で、文章の前後半角のスペースを省くには、

$str =~ s/^\s+//g;
$str =~ s/\s+$//g;

で除去できるのですが、全角スペースは除去できません。
イタズラ対策として是非施したいので、皆様よろしくお願い致します。


1:[回答] 薫 [2004/03/17 14:54 ]

\sの替わりに全角スペースを入れればよいのでは。
文字コードを統一させる事に気をつけましょう。


2:[質問] windows [2004/03/17 15:10 ]

薫さん、ご回答ありがとうございます!!
文字コードはシフトJISで、16進数から10進数にpack関数で変換する前に

$str =~ s/^(%81%40)+//g; ###---先頭の全角スペース
$str =~ s/(%81%40)+$//g; ###---末尾の全角スペース
$str =~ s/%([\w][\w])/pack("H*", $1)/eg;

と言う仕様にしてみました。
文字コード変換後に、

$str =~ s/ //g;

と言うような置き換えだけはしたくなかったので。
他に、良い方法がありましたら、ご教授の程宜しくお願い致します。



3:[回答] AC [2004/03/17 20:14 ]

>>2
これでは、余計なものを削除する可能性があります。
例えば、 $str = '@=@'; ($strがShift_JISの場合)など。

Perlメモに「前後の空白文字(全角スペース含)を削除する」という文書があります。
http://www.din.or.jp/%7Eohzaki/perl.htm#JP_RmSpace

>>3
>文字コード変換後に、
>$str =〜 s/ //g;
>と言うような置き換えだけはしたくなかったので。
なぜですか?
文字コードが分からないのにShift_JISと仮定して変換して、本当は
EUC-JPとかISO-2022-JPとかUTF-8とかISO-8859-1だったとしたら、
元に戻すのは不可能です。
プログラム内部の文字コードを決めておき、そのコードに変換してから
処理を行うのが分かりやすく、後々メンテナンスも楽です。
#正規表現等で問題が出ないように、EUC-JPかUTF-8を内部コードにするのがよい


4:[完了] windows [2004/03/17 23:41 ]

ACさん、ご回答有難うございます!

リンク先は大変ためになります。私にとってまだまだ難しい内容ですが、今後更に精進し頑張っていこうと思います。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World