回答編集履歴

1

追記

2017/05/01 12:46

投稿

shi_ue
shi_ue

スコア4437

test CHANGED
@@ -17,3 +17,61 @@
17
17
  ubuntu上のthunderbirdは`iso-2022-jp`といいながら、丸数字もちゃんと出ます。
18
18
 
19
19
  なので、大体のメーラーは`iso-2022-jp`ときたら、`iso-2022-jp-ms`と解釈しているんじゃないでしょうか?
20
+
21
+
22
+
23
+ 追記
24
+
25
+ ---
26
+
27
+ 実験コードを書いてみました。
28
+
29
+ ```php
30
+
31
+ <?php
32
+
33
+ mb_language('ja');
34
+
35
+ mb_internal_encoding('UTF-8');
36
+
37
+
38
+
39
+ $text = '①②㈱髙アイウエオ';
40
+
41
+ $text = mb_convert_encoding($text, 'ISO-2022-JP-MS', 'UTF-8');
42
+
43
+
44
+
45
+ $body = "これがテストです\n\n$text"; // ※1
46
+
47
+
48
+
49
+ $output = mb_convert_encoding($body, 'ISO-2022-JP', 'UTF-8'); // ※2
50
+
51
+ echo mb_convert_encoding($output, 'UTF-8', 'ISO-2022-JP-MS'); // ※3
52
+
53
+ ```順を追います。
54
+
55
+ 0. ※1の部分では、UTF-8とISO-2022-JP-MSの混合文が出来ています。
56
+
57
+ 0. ※2の部分では、ISO-2022-JP-MSの部分($text変数の中身)はUTF-8ではないのでコンバートされません。
58
+
59
+ その他の部分がISO-2022-JPにコンバートされます。
60
+
61
+ 0. ※3の部分では、**ISO-2022-JPの部分**と**コンバートされなかったISO-2022-JP-MS部分**の両方がUTF-8へとコンバートされて出力されます。
62
+
63
+ メールだとこの表示される形式へのコンバートをメーラーがやるわけです。大抵のメーラーはISO-2022-JPをISO-2022-JPのMS拡張形式として処理しますので、ちゃんと表示されます。
64
+
65
+
66
+
67
+ したがって、メーラーだとちゃんと出力される、という訳です。
68
+
69
+ しかしながら、文字コードを混在のままコンバートさせていいのかどうか、悩むところです。
70
+
71
+ もし、ISO-2022-JP-MSに統一したとしても、`mb_send_mail`はUTF-8からISO-2022-JPへのコンバートをしようとしますので、そうれもどうなんでしょうか?
72
+
73
+
74
+
75
+ `mb_send_mail`の代わりに`mail`を使うのも手ですが、subjectを`mb_encode_mimeheader`する必要があるので面倒ですか?
76
+
77
+