$title=’【重要】株式会社テスト採用情報『プレエントリー確認』’;
$name_convert = mb_convert_encoding($title, ”ISO-2022-JP”, ”Shift_JIS”);
$name = mb_encode_mimeheader($name_convert, ”ISO-2022-JP”, ”B”);
なにか良い方法はありませんか?
40pt
http://www.php.net/manual/ja/function.mb-encode-mimeheader.php
PHP: mb_encode_mimeheader - Manual
ページ末尾のノーティス 30-Jul-2003 03:02 によると、mb_encode_mimeheaderにはバグがあり文字列を壊すことがあるため、先頭から36バイトごとに分割しながら使ったらどうでしょうと書いてあります。その例を元にして書き直したものです。私のPHP-4.3.11ではこれで正しく変換してくれます。
$title=’【重要】株式会社テスト採用情報『プレエントリー確認』’;
$string = mb_convert_encoding($title, ”ISO-2022-JP”, ”Shift_JIS”);
$name = ’’;
$pos=0;
$split=36; // after 36 single bytes characters, if then comes MB, it is broken
while ( $pos < mb_strlen($string,”ISO-2022-JP”) ) {
$output = mb_strimwidth($string,$pos,$split,””,”ISO-2022-JP”);
$pos += mb_strlen($output,”ISO-2022-JP”);
$name .= mb_encode_mimeheader($output,”ISO-2022-JP”, ”B”);
}
ありがとうございます。無事に解決しました。