Home > Archives > 2010-01-12

2010-01-12

静止画像を連続表示するソフトSnapViewer v0.05を公開

  • 2010-01-12 (火)
  • 日常
  • 投稿者:hitotsu
静止画像を連続表示するソフト(SnapViewer)の最新版v0.05を公開した。
v0.05のリリースノート

前回リリースが2009/1/15なので丁度1年振りだ。
大きな目玉は表示画面をプライマリディスプレイに全画面表示できること。

2台ディスプレイをもっておれば、2台目のディスプレイにアプリケーションフォームを
表示させておき、プライマリディスプレイの大きな画面を見ながら、
更新周期・増減フレーム数・スキップフレーム数を変更できる。

撮りためしているWebキャプチャー画像を連続再生するには重宝しそうだ。

しかし、会社の環境はマルチモニター環境で↑のような使い方ができるが、
自宅はディスプレイが1台なので、全画面表示中に表示パラメータの変更ができない。
誰かから要望があればディスプレイ1台でも変更できる方法を考えることにしよう。
  • Comments (Close): 0
  • Trackbacks (Close): 0

PHPのmail()関数で日本語メールを送信するとSubjectの20文字目から文字化けする

  • 2010-01-12 (火)
  • PHP
  • 投稿者:hitotsu
PHPのmail()関数に渡すSubjectに漢字をMIMEエンコードしたものを渡すと、長いタイトルの時に20文字目から文字化けすることに気が付いた。
ターゲットはPHP 5.2.1。
問題のメールのSubject(タイトル)を生成する部分
$subject = mb_encode_mimeheader(mb_convert_encoding($subject, "ISO-2022-JP", "UTF-8"),"ISO-2022-JP","B","\r\n");

これだと

「開発者ブログる。投稿者さんからメールテストです」

が20文字目から文字化けして以下のようになる。

「開発者ブログる。投稿者さんからメールテ9%H$G$9」

PHPスクリプトファイルはUTF-8。
mail()関数のバグの可能性もあると思ったが、
そろそろ枯れているはず(と思いたい)なので、調べてみた。
結論を書くと、mail()関数のせいではない。
mail()関数に渡すMIMEエンコードしたSubjectに問題があった。
つまりmb_encode_mimeheader()が原因である。
対処方法は以下のとおり。

次のようにmb_encode_mimeheader()を使う前に、internal_encodingを変更すると
正しくマルチバイト文字をエンコードできるようになった。
$org = mb_internal_encoding();	// 元のエンコーディングを保存
mb_internal_encoding("ISO-2022-JP");// 変換したい文字列のエンコーディングをセット
$subject = mb_encode_mimeheader(mb_convert_encoding($subject, "ISO-2022-JP", "UTF-8"),"ISO-2022-JP","B","\r\n");
mb_internal_encoding($org);// エンコーディングを戻す
問題なくタイトルや長い文字列でもエンコードできるようになった。
以下のブログが参考になった。
どうもありがとう。
PHPのmb_encode_mimeheaderは事前にmb_internal_encodingが必要
[編集履歴]
  • 2010-02-18 修正後のソース中、mb_convert_encoding中のsubjectに$が付いていなかったので付加

Home > Archives > 2010-01-12

メタ情報

Return to page top