ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:英語の文字列を適度な文字数で改行したい場合、単語の途中で改行させない方法

Webの登録システムで、英文を入力して登録する場合があります。
登録すると、登録内容を通知するメールを送信します。

英文を登録した場合、メールに記載する英文の改行の位置は、単語の途中にしないで欲しい、と要望がありました。

自力で実装する場合

単語の区切りとして、スペース、カンマ、ピリオドが考えられます。
スペース、カンマ、ピリオドで区切って、配列に文字列を入れます。
配列に入れた文字列を、1個目から取り出し、取り出した文字列を、テンポラリ変数で連結します。
テンポラリ変数での文字列の長さが、規定値より短ければ、テンポラリ変数から出力変数にコピーします。
配列から文字列を取り出し、テンポラリ変数に連結を繰り返して、規定値より長くなったら、出力変数を確定した文字列として出力します。
合わせて、テンポラリ変数を初期化して、取り出した文字列を、テンポラリ変数に連結を再度行い、ループを繰り返します。

こんな感じで、自力で実装すれば、なんとかなりそうです。

プログラミング
Photo by Árpád Czapp on Unsplash

PHPであれば、wordwrapを利用する

PHPにはwordwrapという関数があります。
www.php.net

指定した文字数で分割して、分割位置に指定の文字を連結してくれます。
単語の途中では、分割をしません。

My dream is to teach Japanese in a foreign country.My hobby is reading novels.I didn't know what toanswer to the question.
という英文で試したら、
My dream is to teach Japanese in a foreign country.My hobby is reading
novels.I didn't know what toanswer to the question.
となりました。

$newtext = wordwrap("My dream is to teach Japanese in a foreign country.My hobby is reading novels.I didn't know what toanswer to the question.", 76, "\r\n");
echo $newtext;

このように利用しています。
文字数として76を指定していますが、70文字で分割して、76文字を超えないようになっています。


実装するより、関数の利用で、間違いがなく確実に要望を満たせます。