質問編集履歴
5
追記3を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -534,7 +534,7 @@
|
|
534
534
|
|
535
535
|
[PHPで外字を含む文字列のエンコードコンバート](https://cloudpack.media/761)
|
536
536
|
|
537
|
-
>
|
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
|
+

|
724
|
+
|
725
|
+
|
726
|
+
|
727
|
+

|
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を追加
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
追記を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
|
90
90
|
|
91
|
-
```PHP
|
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
|

|
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
|
+

|
558
|
+
|
559
|
+
|
560
|
+
|
561
|
+
試しに、GmailからHUAWEI P8liteに送ってみると…
|
562
|
+
|
563
|
+
---
|
564
|
+
|
565
|
+
問題なく表示されました。(さすが…)
|
566
|
+
|
567
|
+
|
568
|
+
|
569
|
+
|
570
|
+
|
571
|
+
引き続き、ご指導お願い申し上げます。
|
2
スクリーンショットを追加
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
|
+

|
1
タグに「メール」を追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|