備忘録

気になったこと、調べたこと、わからなかったことなど..

【PHP】メール送信で自動改行されて文字化けする

事象 

一行にある程度文字を入れて送信したとき、文字化けが発生する。
f:id:omomo_memo:20210510174113p:plain

原因

1行に1000バイト入った状態だと、メール送信サーバーが改行を入れるため。

詳細

インターネット通信規格RFCというインターネットの仕様をまとめてある文書があります。
その中で、メールは1行1000バイトまでと決められているそうです。
なので、1行に1000バイト入っていたら、文字コードの考慮なく改行コードが入り、そこで文字化けが発生してしまうということです。
まぁ1行に1000バイトも入れることは早々ないと思いますが..

解決策

適度に改行を入れてあげるしかないと思います。
PHPには指定した文字数で、指定した文字で区切るwordwrap関数というものがあるので、それを使って区切ってあげてもいいと思います。
ただ、この関数はマルチバイトに対応していないので、日本語の文字列を区切ることに使うのは難しいかも。
色んな方がマルチバイトに対応させたwordwrap関数を作ってくださっているので、検索すれば色々出てくると思います。

参考サイト

1行1000バイトを超えると文字化けするメール | Points & Lines
PHP: wordwrap - Manual
[PHP]マルチバイト対応のwordwrapが無いから作った - Qiita
マルチバイト文字対応のwordwrap()|php|STEP UP BLOG