mb_encode_mimeheader

RFC2047あたりで長すぎるのは折り返してねとなっているので、mime情報は独自実装よりmb_encode_mimeheader使うのがベターだと思います。
モバイルだと30Byte制限あるので折り返し必要になることなさそうですが。

<?php
mb_internal_encoding('SJIS-win');
$subject = "サブジェクトのテストでござる①";

print mb_encode_mimeheader($subject, 'SJIS-win');
// =?Shift_JIS?B?g1SDdYNXg0aDToNngszDvcSCxYKygrSC6YdA?=
print base64_decode('g1SDdYNXg0aDToNngszDvcSCxYKygrSC6YdA');
// サブジェクトのテストでござる①

print mb_encode_mimeheader($subject, 'SJIS');
// =?Shift_JIS?B?g1SDdYNXg0aDToNngszDvcSCxYKygrSC6T8?=
print base64_decode('g1SDdYNXg0aDToNngszDvcSCxYKygrSC6T8');
// サブジェクトのテストでござる?

print mb_encode_mimeheader('とても長いサブジェクトのテストなんですよ', 'UTF-8');
// =?UTF-8?B?44Go44Gm44KC6ZW344GE44K144OW44K444Kn44Kv44OI44Gu44OG44K544OI?=
//  =?UTF-8?B?44Gq44KT44Gn44GZ44KI?=
?>

動作的には、internal_encodingから第二引数へ変換してbase64エンコードMIME情報付加な感じ。
SJISやUTF8で送信したい場合はmb_send_mailは窓から投げ捨てましょう。

はてダのバグ

いわゆる機種依存文字で日記を書く場合以下で文字化けが発生する。

  • 新規登録
  • プレビュー
  • 確認する

編集>登録の場合は発生しない。
不具合報告ははてなアイディアからとのことで報告しようとしたけど、イワシとか知らん。
というわけで、不具合報告受け付ける気がないように見えたのでしません><

mb_strwidth

mb_strwidth

<?php
echo mb_strwidth('3');  // 1
echo mb_strwidth('o');  // 1
echo mb_strwidth(''); // 2
echo mb_strwidth(''); // 2
echo mb_strwidth('');  // 1
echo mb_strwidth(''); // 1
echo mb_strwidth('ω'); // 1

なんか顔文字みたいでカワユス。
⑩てUnicode一覧みるとU+2469ぽいんだけど1かえってきてるし。
ωは1なのは仕様どおり。
mb_strwidthの使いどころがわからん。

Ethna_DB_ADOdb

EthnaのDBクラスにEthna_DB_ADOdbを利用するとAppObjectでundefined methodエラーがでるのは周知の事実ですが、みんなAppObjectを使わずadodbを直で操作するので問題としてあがってきません。
1年以上前の話ですが、いまさらパッチでも送ろうとしてリポジトリ漁ったけど見当たらない。
ロガー変更のために直でファイルいじりそのまま修正したような記憶が甦りPEARディレクトリを漁るとすでにファイルは上書き済み、、、

エンコーディングとか

PHPの内部エンコードやら変換にはSJIS-winを使えがやっと浸透してきましたが、eucJP-winは未だに使ってくれません。
MySQLのDBエンコーディングはいくらいってもSJISからCP932に変更してもらえません。

<?php
mb_internal_encoding('UTF-8');
$str = "ァィゥェォ①㈱"

print mb_convert_encoding($str, 'SJIS');
// ァィゥェォ??
print mb_convert_encoding($str, 'SJIS-win');
// ァィゥェォ①㈱

print mb_convert_encoding($str, 'EUC-JP');
// ァィゥェォ??
print mb_convert_encoding($str, 'eucJP-win');
// ァィゥェォ①㈱

print mb_convert_encoding($str, 'ISO-2022-JP');
// ???????
print mb_convert_encoding($str, 'JIS');
// ァィゥェォ??
print mb_convert_encoding($str, 'ISO-2022-JP-MS');
// ァィゥェォ①㈱

このままだともちろん化けるので、ブラウザで開いて文字エンコーディングでも切り替えて確認してください。