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文字を超えないようになっています。
実装するより、関数の利用で、間違いがなく確実に要望を満たせます。