i-modeの絵文字をPCで画像に置換して表示させるには

[上に] [前に] [次に]
cure 2000/05/29(月) 10:00:58
i-mode対応のBBSを作っていて、半角かなを全角にする処理は
わかったのですが、絵文字を表示させる方法がわかりません。
おそらく絵文字の内容が含まれるデータをチェックして、
絵文字コードの番号からそれに対応した画像を表示させればいいと思うのですが、
そのチェックの仕方がわからないです。
外字ファイルの組み込みも考えたのですがますますわからないのでやめました。
是非教えて下さい。

dddd 2000/05/29(月) 10:29:53
ていうか素直に外字を使うのが楽。
http://www.vector.co.jp/soft/win95/writing/se124240.html

cure 2000/05/29(月) 23:01:43
外字ファイルは持ってますが、全てのユーザーに持って貰うわけにもいかないので、
こちら側で定義して相手にもちゃんと表示させられるようにしたいのですが・・・

Fuji.♪ [E-Mail] [HomePage] 2000/05/30(火) 10:15:06
外字ファイルがあるということは、文字コードは分かっているのではないのですか?

http://www.nttdocomo.co.jp/i/tag/emoji/index.html

ここにShift-JISでの文字コード表が用意されているのですが、このコードを見つけたら画像を出力するように置換してやればいいだけではないのですか?
掲示板を作っていて、ということは、その程度のことは出来るかと思いますが。

cure 2000/05/31(水) 07:56:14
人の作ったBBSを改造してるので、全然わかりません(^_^;)
一応画像は全部手元に揃えたのですが・・・

悪魔のZ 2000/05/31(水) 11:17:54
自分でどこを改造すればいいのかがわからないなら
現状の掲示板ソースを公開してみてはいかがですか?

cure 2000/06/02(金) 02:14:54
#!/usr/bin/perl

require './jcode.pl';

$title = "";
$bgcolor = "#ffffff";
$text= "#000000";
$homepage = '';
$max  = 100;
$tagkey  = 0;
$script  = './bbs.cgi';
$logfile = './bbs.log';
$method  = 'POST';
$pagelog = 3;

&form_decode;
if ($mode eq "write") { &write; }
&display;

sub header {
print "Content-type: text/html\n\n";
print "<html>\n<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
print "<title>$title</title></head>\n";

}

sub display {
open(IN,"$logfile") || &error("Can't open $logfile");
@lines = <IN>;
close(IN);
&header;
print <<"EOM";
<form method="$method" action="$script">
<input type=hidden name=mode value="write">
</center>
名前:<input type=text name=name size="5"><br>
内容:<textarea cols="5" rows=1 name=comment>$rescom</textarea>
<input type=submit value="書" size="5">
</form>
<hr size=1>
<center>
EOM

if ($FORM{'page'} eq '') { $page = 0; }
else { $page = $FORM{'page'}; }

$end_data = @lines - 1;
$page_end = $page + ($pagelog - 1);
if ($page_end >= $end_data) { $page_end = $end_data; }
foreach ($page .. $page_end) {
($num,$date,$name,$com) = split(/<>/,$lines[$_]);

print "</center>[$name]<br>($date)<br>";
print "</center>$com<center><hr size=1>";
}

$next_line = $page_end + 1;
$back_line = $page - $pagelog;

if ($back_line >= 0) {
  print "<form method=\"$method\" action=\"$script\">\n";
  print "<input type=hidden name=page value=\"$back_line\">\n";
  print "<input type=submit value=\"前\">\n";
  print "</form>\n";
}

if ($page_end ne $end_data) {
  print "<form method=\"$method\" action=\"$script\">\n";
  print "<input type=hidden name=page value=\"$next_line\">\n";
  print "<input type=submit value=\"次\">\n";
  print "</form>\n";
}
print <<"EOM";

EOM

print <<"HTML";
</center>
<center>
<a href=$homepage>戻る</a><br>
</body></html>


HTML
exit;
}

sub write {
if ($name eq "") { &error("名前が入力されていません。"); }
if ($com eq "") { &error("コメントが入力されていません。"); }

open(LOG,"$logfile") || &error("Can't open $logfile");
@lines = <LOG>;
close(LOG);

($knum,$kdate,$kname,$kcom) = split(/<>/,$lines[0]);
if ($name eq $kname && $com eq $kcom) { &error("二重投稿は禁止です"); }

@new = ();
for($i=0;$i<$max-1;$i++) { push (@new,$lines[$i]); }
$number = $knum + 1;

unshift (@new,"$number<>$date<>$name<>$com\n");

open(LOG,">$logfile") || &error("Can't write $logfile");
print LOG @new;
close(LOG);

}
#---------------

#-----[変換処理]
sub form_decode {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

if ($tagkey == 0) {
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\"/&quot;/g;
} else {
$value =~ s/<>/&lt;&gt;/g;
}

$FORM{$name} = $value;
}

$name  = $FORM{'name'};
$com   = $FORM{'comment'};
$com   =~ s/\r\n/<br>/g;
$com   =~ s/\r|\n/<br>/g;
$mode  = $FORM{'mode'};
        &jcode'h2z_sjis(\$name);
&jcode'h2z_sjis(\$com);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year = 1900 + $year;
$mon++;
if ($mon  < 10) { $mon  = "0$mon";  }
if ($mday < 10) { $mday = "0$mday"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($min  < 10) { $min  = "0$min";  }

$date = "$mon\/$mday\ $hour\:$min";

}

sub error {
if (-e $lockfile) { unlink($lockfile); }

&header;
print "<center><hr width=75% size=1><P><h3>Error!</h3>\n";
print "<P><font color=#dd0000><B>$_[0]</B></font>\n";
print "<P><hr width=75%></center>\n";
print "</body></html>\n";
exit;
}

cure 2000/06/02(金) 02:15:22
長いです。すみません(^_^;)

悪魔のZ 2000/06/02(金) 14:32:35
104行の (@new,"$number<>$date<>$name<>$com\n");
をする前までに$comの中身を絵文字のコードが無いかをチェック
して置き換えればいいのかな?

# できればスクリプトはテキストファイルに吐き出してURLで公開して欲しかったな…

cure 2000/06/02(金) 23:20:44
すみませんでした・・・(^_^;)
それも考えたのですが・・・。

チェックする場所は半角かなをチェックしてるあたりでやればいいと思うんです。
半角かなをチェックするにはjcode.plを使えば一発ですが、
絵文字のコードをチェックするにはどんな方法でやればいいですか?
このスクリプトの1割くらいしか手加えてないしcgiの知識も全然無いので教えて下さい。

悪魔のZ 2000/06/04(日) 00:30:13
s/([\xxxx-\xxxx])/<img src=\"sprintf ("%4x";$1)\.gif\">/g
こんなカンジで置き換えるんだろうけど
今環境が無いのでテストできません
月曜まで残ってたらテストするんでちょっと待っててください
(それまでに他の人が修正してくれるかもしれないけど)

[上に] [前に] [次に]