#PerlでTwitter連携時絵文字が10進数のHTML Entityとして表示されてしまう件
・ブログ更新時に更新通知が自動でTweetされるシステム。
起きている不具合
Tweet時に以下のように
「こんにちは朗」
などと絵文字だけエンティティ化されてTweetされてしまう。
よって、
Tweet時に絵文字が正常に表示される。 これを実現したいです。
###前提
- 内部文字列EUC-JP
- Tweet内容はPOSTで受け取った内容
- Net::Twitter::Lite モジュールを使用
- 筆者、実環境でのテストを認められず
以上 3ファイル構成
問題のコード
-
blog.htmlでPOST(投稿)
-
twiter.cgiでPOSTのパラメータ受け取り、サブルーチンの引数として渡す
-
tweet_sub.plにサブルーチン定義
POSTメソッドでフォームからデータをうけとる。
HTML
1#blog.html 2#ブログ投稿フォーム 3<form action="twitter.cgi" method="POST" style="display:inline" enctype="multipart/form-data"> 4<input type="hidden" name="mode" value="foo"> 5<input type="text" name="title"> 6 7~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 9</form>
Perl
1#twiter.cgi 2use Encode; 3use Net::Twitter::Lite; 4require '../tweet_sub.pl'; 5 6 7##POSTでフォームから受け取ったパラメータが'foo'の時実行 8if($param{'mode'} eq 'foo'){ 9~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10 11##受け取ったパラメータをサブルーチンの引数として渡す。 12&tweet_notice($param{'title'}); 13} 14 15 16 17#tweet_sub.pl 18use Encode; 19sub tweet_notice{ 20##本来は複数の引数だが今回は一つに。 21my ($title) = shift; 22 23#ここでデコードしている。。 24$title = decode('eucjp', $title); 25~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 26$tweet = "$title $user_name $blog_url $hashtag $tweet_time"; 27my $result = $net_twitter->update($tweet); 28}
考察
ググったり、XAMPP環境にActive Perlを入れて限りなく寄せて模擬的にテストをしてみた。
- 出力時には必ずエンコードする
まずこのお約束に則り、Tweet処理直前にUTF-8バイト文字列にエンコードを行いUnicodeに対応させるべきではないか。
Perl
1 2#tweet_sub.pl 3use Encode; 4 5 6sub tweet_notice{ 7##本来は複数の引数だが今回は一つに。 8my ($title) = shift; 9 10#ここでデコードしている。。 11$title = decode('eucjp', $title); 12~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 13 14 15$title = encode('UTF-8', $title); ##ココでエンコード処理を追加 16$tweet = "$title $user_name $blog_url $hashtag $tweet_time"; 17my $result = $net_twitter->update($tweet); 18}
エンコード/デコードの知識が非常に乏しく
ご教授いただければ幸いです。
何卒よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/04 12:13