先日、XOOPSを大昔に導入させていただいたお客様から、相談がありました。
「メールフォームから送信してもらったメールの本文が途中からおかしくなってしまって・・・・・・」

保守から完全に離れたお客様だったので迷ったんですが、起こってる問題が問題だったので、勉強をかねて対応することに。

メールフォームの動きを調べるために、私が面倒くさがって改行をまったくしなかったメールが、途中からちらほらと文字化け。2回ほど一部分文字化けした後、全部文字化け。文字化けっていうか、%とか数字とかの羅列。これは見たことがある・・・・・・。

文字化けしているところに法則性がありそうだったので、何バイトで文字化けしてるのかを調べたりしてみて、ネットで検索するとこんな記事がありました。

mb_send_mail()関数に改行無しの長文を渡すと文字化け

どうも、改行なしだと1000バイトで改行コードが強制的に入れられるようです。(サーバによる?)
1000バイトも改行なしで入れられることがあるのかなぁとも思うんですけど、あるんですよね。

強制的に改行をしてやればいいんですけど、PHP側を触るとさすがに無償というわけにもいかないし。
HTMLのほうでなんとかならないかなぁと思って、<textarea>のタグにこれを加えることに。

「wrap = hard」

テキストエリアに文字を打ち続けると右端で勝手に折り返しますよね。普通はそこに改行コードは入らないんですけど、そこに改行コードが入るタグです。

ただし、ブラウザの独自機能のようです。IE8とFirefox3.5.5では確認済みです。

とりあえず、今できる範囲で対応いたしました。

ツꀀHTML/フォームtexterea要素のwrap属性について