プログラム質問箱への投稿
記事番号00698へのフォローを投稿します。
お名前(ペンネイムで結構ですが必要です)
(
ブラウザに個人情報を覚えさせない)
電子メイルアドレス(必要です)
題名(必要です)
Home Page がある方はリンク希望先の URL を記載して下さい
会議室に載せたい内容を以下へお書き下さい (
HTMLを解釈せずにそのまま表示)
6月8日に、にあさんは書きました。 >6月6日に、くろみつさんは書きました。 > >>掲示板のCGIを作成中ですが、imode,PC,EZでも共通に見れるようにしているのですが、 >>imodeの絵文字が、PCでは文字化けですんでいるのですが、EZになると、コンパイルエラーが出るのです。 >>そこで、EZに表示する時のみ絵文字(SJIS:63647〜63919)を除いて表示したいのです。 >>だれか、特定の文字コードの文字だけを取り除く方法をお教え願えないでしょうか? > >とりあえずEZとは何の事だか分からないんですが、(^^;; <A HREF="http://www.nttdocomo.co.jp/i/tag/emoji/" TARGET="help">ドコモの絵文字リスト</A>を見ると、 >ずいぶん飛び飛びにコードが割り当てられているんですね。 > >コードの範囲は、 > >No.001 0xF89F (63647) > . > . >No.094 0xF8FC (63740) >No.095 0xF940 (63808) > . > . >No.104 0xF949 (63817) >No.105 0xF972 (63858) > . > . >No.117 0xF97E (63870) >No.118 0xF980 (63872) > . > . >No.134 0xF990 (63888) >No.135 0xF9B0 (63920) >No.136 0xF991 (63889) > . > . >No.166 0xF9AF (63919) > >ですから、正規表現で書くと、 > >$re_emoji = '\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x72-\x7E\x80-\xB0]'; > >となりますね。 > >簡便にはこれらの文字が現われたら、ゲタ(〓)か何かに差し替えてしまえば良いので、 > >$str =~ s/$re_emoji/〓/g; # 簡単な式 > >で出来ますが、これだと偶々隣り合った漢字の[2バイト目1バイト目]の並びが >絵文字に一致してしまうと、そこまで変換してしまいます。 > >例えば、 > >$str = "半角カナ(\xB6\xC5)やAlphabetが有っても" > . "絵文字(\xF9\x75\xF8\xA2)は除けるけど、" > . "需要とかも化けてしまうかも?"; > >と言う文字列が有ると、これが、 > >「半角カナ(<FONT SIZE="SMALL">カナ</FONT>)やAlphabetが有っても絵文字(〓〓)は除けるけど、氏<FONT SIZE="SMALL">ヤ</FONT>vとかも化けてしまうかも?」 > >の様になってしまいます。 > >perlのヴァージョン5を使っているなら、上の簡単な式の代わりに、 > >$re_ascii = '[\x00-\x7F]'; >$re_sjis_c = '[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]'; >$re_sjis_kana = '[\xA1-\xDF]'; >$re_emoji = '\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x72-\x7E\x80-\xB0]'; > >$str =~ s/\G((?:$re_ascii|$re_sjis_c|$re_sjis_kana)*?)(?:$re_emoji)/$1〓/g; # 複雑な式 > >とすれば、正しく、 > >「半角カナ(<FONT SIZE="SMALL">カナ</FONT>)やAlphabetが有っても絵文字(〓〓)は除けるけど、需要とかも化けてしまうかも?」 > >となります。 > ># perl4だと、前回の一致位置のしっぽ(\G)も最短一致(*?)も無いので、 ># ループを回さなくてはいけないでしょうから面倒そう。取りあえずperl4版はパスです。(^^;
ホームペーヂに戻る
nir@mvg.biglobe.ne.jp
Last Update: 2 December 1999