質問編集履歴

5

追記3を追加

2016/10/18 10:43

投稿

chibi_kuma
chibi_kuma

スコア85

test CHANGED
File without changes
test CHANGED
@@ -534,7 +534,7 @@
534
534
 
535
535
  [PHPで外字を含む文字列のエンコードコンバート](https://cloudpack.media/761)
536
536
 
537
- > しかし、PHP V5.2.1以降では『iso-2022-jp-ms』というエンコーディングが追加され、
537
+ > PHP V5.2.1以降では『iso-2022-jp-ms』というエンコーディングが追加され、
538
538
 
539
539
  このエンコーディングでサポートされている文字も変換する事が可能になりました。
540
540
 
@@ -568,12 +568,6 @@
568
568
 
569
569
 
570
570
 
571
- 引き続き、ご指導お願い申し上げます。
572
-
573
-
574
-
575
-
576
-
577
571
  追記2
578
572
 
579
573
  ---
@@ -626,13 +620,11 @@
626
620
 
627
621
  (2008年位より前に発売されたガラケー)は、サポート外にしようと思っていますが、
628
622
 
629
- 「SHA-2」方式および「TLS1.0以上」に対応している機種で、
630
-
631
- 「ISO-2022-JP-MS」がサポートされていない機種って、まだまだあるものなのでしょうか?
623
+ 対応している機種で「ISO-2022-JP-MS」がサポートされていない機種って、
632
-
624
+
633
- (どうやって調べるんですか…こういうの…)
625
+ あるものなのでしょうか?(どうやって調べるんですか…こういうの…)
634
-
626
+
635
- 何か情報をお持ちでしたら、御知らせいただければ幸いです。
627
+ 情報をお持ちでしたら、御知らせいただければ幸いです。
636
628
 
637
629
 
638
630
 
@@ -656,4 +648,130 @@
656
648
 
657
649
 
658
650
 
651
+
652
+
653
+ 追記3
654
+
655
+ ---
656
+
657
+ imutakaoruさんからいただいたコードを、実行させてみました。
658
+
659
+ 無事、UTF-8のままで送れました!!
660
+
661
+ (imutakaoruさん、ありがとうございます!)
662
+
663
+
664
+
665
+ 受信したメールのヘッダーを確認したところ、
666
+
667
+ となっており、Gmailに近づいた気がします。(自分の理想に近い)
668
+
669
+
670
+
659
- 取り急ぎ、ご報告まで。
671
+ ```ここに言語を入力
672
+
673
+ MIME-Version: 1.0
674
+
675
+ Content-Type: text/plain; charset=UTF-8
676
+
677
+ Content-Transfer-Encoding: BASE64
678
+
679
+
680
+
681
+ ```
682
+
683
+
684
+
685
+ UTF-8をフルカバーできるか?
686
+
687
+ ---
688
+
689
+ ISO-2022-JP-MS に変換しないので、ISO-2022-JP-MS に含まれていない文字が本文に入っていたら
690
+
691
+ どうなるかと思い、以下のサイトで紹介されていた二字を足してみました。
692
+
693
+
694
+
695
+ [マルチバイト文字を扱う際に気をつけること](http://qiita.com/mpyw/items/a8dba1b80fe68523b8eb)
696
+
697
+ (U+29E3Dの「=ホッケ」と U+50AA「=さん」)
698
+
699
+
700
+
701
+ この2字がUTF-8かどうか、よく分かりませんが、
702
+
703
+ 一応、UTF-8のファイルではちゃんと書けています。
704
+
705
+
706
+
707
+ $message = 'これはテストです コレハテストデス 神と神 ①②③ 髙﨑黑神福 ㈱ Ⅰ Ⅱ Ⅲ ???? 傪';
708
+
709
+
710
+
711
+ これを、imutakaoruさんからいただいたコードで送信した結果は、以下の通りでした。
712
+
713
+
714
+
715
+ iPhone OK
716
+
717
+ HUAWEI P8lite 「????」が文字化け
718
+
719
+ AL-Mail ???? 傪 とも文字化け
720
+
721
+
722
+
723
+ ![イメージ説明](131430c193da5bd1ff274f7c5ef19728.jpeg)
724
+
725
+
726
+
727
+ ![(画像添付)](6b1fff535325545e317341bb573d10cf.jpeg)
728
+
729
+
730
+
731
+
732
+
733
+ HUAWEI P8liteは フォントが省略されているのではないかと思います。
734
+
735
+
736
+
737
+ 「Al-Mail」で受信したメールを外部エディタで確認してみると、
738
+
739
+ 本文はちゃんとBASE64でエンコードされていました。
740
+
741
+ 別のサイトで同じ文字列をBASE64エンコードして比較したところ、
742
+
743
+ 合致しましたので、エンコードの問題ではなさそうです。
744
+
745
+
746
+
747
+ Gmailからも同じ文字列を、Al-Mail宛に送ってみましたが、
748
+
749
+ やっはり同じように、最後の2字が化けました。
750
+
751
+ Al-Mailの問題か、フォントの問題かなと思います。
752
+
753
+
754
+
755
+ Al-Mailは古すぎるので、もうサポート外で良いのですが、
756
+
757
+ HUAWEI P8liteは、表示して欲しかったなぁ…。
758
+
759
+
760
+
761
+ 先ほど引用させていただいた、この一言に尽きるわけですね…。
762
+
763
+
764
+
765
+ > 文字エンコードを正しくコンバート出来る事と、
766
+
767
+ > 端末で外字を表示出来る事はイコールではありません。
768
+
769
+
770
+
771
+ UTF-8の全ての文字をサポートしようと思うと、
772
+
773
+ 難しそうなので、(端末側のフォント事情になると、もうどうしようもない。)
774
+
775
+ サポート文字範囲は、「ISO-2022-JP-MS」に含まれている文字まで、
776
+
777
+ それ以外はエンティティするか、ゲタ文字に置き換える、という仕様の方が安心できそうです。

4

追記2を追加

2016/10/18 10:43

投稿

chibi_kuma
chibi_kuma

スコア85

test CHANGED
File without changes
test CHANGED
@@ -569,3 +569,91 @@
569
569
 
570
570
 
571
571
  引き続き、ご指導お願い申し上げます。
572
+
573
+
574
+
575
+
576
+
577
+ 追記2
578
+
579
+ ---
580
+
581
+
582
+
583
+ HUAWEI P8lite のみ、ヘッダー情報がメール本文内になだれ込んでいる件、
584
+
585
+ 原因は、この行でした。
586
+
587
+
588
+
589
+ HUAWEI P8liteに届いたメールだけ、何故かメールの送信時間が
590
+
591
+ 「1970年1月1日」になっていたので、ヘッダーが壊れてるなと…。
592
+
593
+
594
+
595
+ ```PHP
596
+
597
+ $headers = 'From: XXXX@XXXX.XXX' . "\r\n"; //修正前
598
+
599
+ $headers = 'From: XXXX@XXXX.XXX' . "\n"; //修正後
600
+
601
+ ```
602
+
603
+
604
+
605
+ これでとりあえず、手持ちの端末では全てOKになりました!(ありがとうございます!)
606
+
607
+ 自宅に戻らないと確認できませんが、Mac、古いガラケーなども確認したいと思います。
608
+
609
+
610
+
611
+
612
+
613
+ PHPからISO-2022-JP-MS でメールを送信されている方へ追加でお尋ね
614
+
615
+ ---
616
+
617
+ ガラケーなど「ISO-2022-JP-MS」がサポートされていない端末も当然あるのではと
618
+
619
+ 気になっています。
620
+
621
+
622
+
623
+ サーバ証明書が切り替わりますので、
624
+
625
+ 「SHA-2」方式および「TLS1.0以上」に対応していない携帯端末
626
+
627
+ (2008年位より前に発売されたガラケー)は、サポート外にしようと思っていますが、
628
+
629
+ 「SHA-2」方式および「TLS1.0以上」に対応している機種で、
630
+
631
+ 「ISO-2022-JP-MS」がサポートされていない機種って、まだまだあるものなのでしょうか?
632
+
633
+ (どうやって調べるんですかね…こういうの…)
634
+
635
+ 何か情報をお持ちでしたら、御知らせいただければ幸いです。
636
+
637
+
638
+
639
+
640
+
641
+ UTF-8の文字で、ISO-2022-JP-MSに含まれていない文字への対策
642
+
643
+ ---
644
+
645
+ UTF-8の文字で、ISO-2022-JP-MSに含まれていない文字が入っていた場合にやはり化けるので、
646
+
647
+ 以下の一行を追加しました。
648
+
649
+
650
+
651
+ ```PHP
652
+
653
+ mb_substitute_character('entity');
654
+
655
+ ```
656
+
657
+
658
+
659
+ 取り急ぎ、ご報告まで。

3

追記を追加

2016/10/18 08:20

投稿

chibi_kuma
chibi_kuma

スコア85

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- ```PHP5.6
91
+ ```PHP
92
92
 
93
93
  <?php
94
94
 
@@ -374,10 +374,6 @@
374
374
 
375
375
 
376
376
 
377
-
378
-
379
- コード
380
-
381
377
  ```
382
378
 
383
379
 
@@ -387,3 +383,189 @@
387
383
 
388
384
 
389
385
  ![イメージ説明](d89c71d562613b826d9b23749dc75234.jpeg)
386
+
387
+
388
+
389
+ 追記
390
+
391
+ ---
392
+
393
+ 皆さん、たくさんご回答いただき、ありがとうございます。
394
+
395
+ こちらでまとめてお返事させていただく失礼をお許しください。
396
+
397
+
398
+
399
+ 参考にしたサイトが「添付を付ける例」だったので、
400
+
401
+ ちょっと小難しく考えすぎたのかと思いまして、
402
+
403
+ プログラムをシンプルなものにして、再検証してみました。
404
+
405
+
406
+
407
+ ```PHP
408
+
409
+
410
+
411
+ <?php
412
+
413
+ mb_language("Japanese");
414
+
415
+ mb_internal_encoding("UTF-8");
416
+
417
+ $to = 'XXX@XXXX.XXX';
418
+
419
+ $subject = 'これはテストプログラムから送信したメール!';
420
+
421
+ $message = 'これはテストです コレハテストデス 神と神 ①②③ 髙﨑黑神福 ㈱ Ⅰ Ⅱ Ⅲ';
422
+
423
+ $message = mb_convert_encoding($message, 'ISO-2022-JP-MS');
424
+
425
+ $headers = 'From: XXXX@XXXX.XXX' . "\r\n";
426
+
427
+
428
+
429
+ mb_send_mail ($to, $subject, $message, $headers);
430
+
431
+ ```
432
+
433
+
434
+
435
+ mailではなく、mb_send_mail にしました。
436
+
437
+
438
+
439
+ ちなみに、mb_get_info()の結果は以下の通りです。
440
+
441
+
442
+
443
+ ```
444
+
445
+ ------------------------------------------------------------------------
446
+
447
+ mb_get_info()の出力結果(カゴヤ・ジャパン レンタルサーバー)
448
+
449
+ ------------------------------------------------------------------------
450
+
451
+ Array
452
+
453
+ (
454
+
455
+ [internal_encoding] => UTF-8
456
+
457
+ [http_input] => UTF-8
458
+
459
+ [http_output] => UTF-8
460
+
461
+ [http_output_conv_mimetypes] => ^(text/|application/xhtml\+xml)
462
+
463
+ [func_overload] => 0
464
+
465
+ [func_overload_list] => no overload
466
+
467
+ [mail_charset] => ISO-2022-JP
468
+
469
+ [mail_header_encoding] => BASE64
470
+
471
+ [mail_body_encoding] => 7bit
472
+
473
+ [illegal_chars] => 0
474
+
475
+ [encoding_translation] => On
476
+
477
+ [language] => Japanese
478
+
479
+ [detect_order] => Array
480
+
481
+ (
482
+
483
+ [0] => ASCII
484
+
485
+ [1] => JIS
486
+
487
+ [2] => UTF-8
488
+
489
+ [3] => EUC-JP
490
+
491
+ [4] => SJIS
492
+
493
+ )
494
+
495
+ [substitute_character] => 63
496
+
497
+ [strict_detection] => Off
498
+
499
+ )
500
+
501
+ ```
502
+
503
+
504
+
505
+
506
+
507
+ エンコードせずにmb_send_mailした場合
508
+
509
+ ---
510
+
511
+ 全環境で、外字が?に化けました。
512
+
513
+
514
+
515
+ ISO-2022-JP-MS にエンコードしてmb_send_mailした場合
516
+
517
+ ---
518
+
519
+ iPhone OK
520
+
521
+ Windows LiveMail OK
522
+
523
+ AL-Mail OK
524
+
525
+ Gmail OK
526
+
527
+ Android(HUAWEI P8lite) NG
528
+
529
+ となりました。惜しい。
530
+
531
+
532
+
533
+ 以下のページで紹介されていますが、
534
+
535
+ [PHPで外字を含む文字列のエンコードコンバート](https://cloudpack.media/761)
536
+
537
+ > しかし、PHP V5.2.1以降では『iso-2022-jp-ms』というエンコーディングが追加され、
538
+
539
+ このエンコーディングでサポートされている文字も変換する事が可能になりました。
540
+
541
+ $str = mb_convert_encoding( $str, 'ISO-2022-JP-MS');
542
+
543
+ これにより、$strに(サポートされている)外字が含まれていても、正常にコンバートすることが出来ます。
544
+
545
+ 但し、文字エンコードを正しくコンバート出来る事と、端末で外字を表示出来る事はイコールではありません。いくら正常にコンバートしても、表示先の端末にその外字がサポートされていなければ表示されません。
546
+
547
+
548
+
549
+ HUAWEI P8lite は、iso-2022-jp-ms を表示できないのかも知れません。
550
+
551
+ 以下の添付を参照していただきたいのですが、ISO-2022-JP-MS でコンバートして送っているけど、
552
+
553
+ ヘッダーのcharsetには、ISO-2022-JP と書かれています。
554
+
555
+
556
+
557
+ ![イメージ説明](1ac3a4402524bd89fd37cdb3451313a1.jpeg)
558
+
559
+
560
+
561
+ 試しに、GmailからHUAWEI P8liteに送ってみると…
562
+
563
+ ---
564
+
565
+ 問題なく表示されました。(さすが…)
566
+
567
+
568
+
569
+
570
+
571
+ 引き続き、ご指導お願い申し上げます。

2

スクリーンショットを追加

2016/10/18 06:40

投稿

chibi_kuma
chibi_kuma

スコア85

test CHANGED
File without changes
test CHANGED
@@ -379,3 +379,11 @@
379
379
  コード
380
380
 
381
381
  ```
382
+
383
+
384
+
385
+ 文字化け時のスマホのスクショを追加します。
386
+
387
+
388
+
389
+ ![イメージ説明](d89c71d562613b826d9b23749dc75234.jpeg)

1

タグに「メール」を追加

2016/10/18 04:27

投稿

chibi_kuma
chibi_kuma

スコア85

test CHANGED
File without changes
test CHANGED
File without changes