フォームメールの途中が文字化けする【PHP】

  • 2020.05.23
  • PHP
フォームメールの途中が文字化けする【PHP】

フォームから送信されたメールの文章が途中が文字化けすることがあります。
その原因は、1行に表示する文字の長さがあるからです。

Emailの1行は、半角998文字まで

つまり改行してないから。

それを解消する方法は、文章に強制的に改行を入れてしまえば良いということです。
下記のメソッドを使えばそれが実現できます。

//---------------------------
//指定した文字数で文字列を分割する
//引数 str    入力文字列
//     width  文字列を分割するときの文字数。
//     break  オプションのパラメータ break を用いて行を分割します。
//     cut    文字列は常に指定した width でラップされます。
//---------------------------
public function wordwrapJP($str, $width=75, $break="\n", $cut = false) {
  if(!$cut){
    $regexp = "#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){" . $width . ",}\b#U";
  }
  else{
    $regexp = "#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){" . $width . "}#";
  }

  $str_length = mb_strlen($str,"utf-8");
  $cut_length = ceil($str_length / $width);

  $i = 1;
  $return = "";
  while ($i < $cut_length) {
    preg_match($regexp, $str,$matches);
    $new_string = $matches[0];
    $return .= $new_string . $break;
    $str = substr($str, strlen($new_string));
    $i++;
  }

  return $return . $str;
}