人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでメール送信ロジックを作成しているのですがメールの件名が以下のソースで行うと38バイト目で文字化けが発生します。
$title=’【重要】株式会社テスト採用情報『プレエントリー確認』’;
$name_convert = mb_convert_encoding($title, ”ISO-2022-JP”, ”Shift_JIS”);
$name = mb_encode_mimeheader($name_convert, ”ISO-2022-JP”, ”B”);
なにか良い方法はありませんか?

●質問者: yashio
●カテゴリ:政治・社会 ゲーム
✍キーワード:ISO-2022-JP name PHP Shift_JIS エントリー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 水谷敏行
●40ポイント

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”);

}

◎質問者からの返答

ありがとうございます。無事に解決しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ