多くの場合、エディタを使用せずに、単純に textarea を使用してユーザーから長い入力を取得します。ユーザーが入力した改行は「n」の形式で保存され、出力時に改行が行われず、大きなテキストがそのまま出力されることがあります。このとき、ライブラリ内の「n」に応じてテキストを折り返すことができます。 PHP には独自の関数 nl2br() があり、関数 nl2p() をカスタマイズすることもできます。
まず、nl2br() 関数を見てみましょう。
定義と使用法
nl2br() 関数は、文字列内の各改行 (n) の前に HTML 改行文字 (
) を挿入します。
簡単な例:
<?php $str = "Welcome to www.scutephp.com"; echo nl2br($str); ?>
実行結果の HTML コード:
Welcome to <br /> www.scutephp.com
nl2p
nl2br には欠点があります。たとえば、段落をインデントするために CSS を使用するのはさらに面倒です。この場合、nl2p が必要になります。 br 改行を段落 p 改行に置き換えます。
のように直接置き換える方が簡単です。<?php function nl2p($text) { return "<p>" . str_replace("\n", "</p><p>", $text) . "</p>"; } ?>
さらに詳細な機能については、以下を試してください:
/** * Returns string with newline formatting converted into HTML paragraphs. * * @param string $string String to be formatted. * @param boolean $line_breaks When true, single-line line-breaks will be converted to HTML break tags. * @param boolean $xml When true, an XML self-closing tag will be applied to break tags (<br />). * @return string */ function nl2p($string, $line_breaks = true, $xml = true) { // Remove existing HTML formatting to avoid double-wrapping things $string = str_replace(array('<p>', '</p>', '<br>', '<br />'), '', $string); // It is conceivable that people might still want single line-breaks // without breaking into a new paragraph. if ($line_breaks == true) return '<p>'.preg_replace(array("/([\n]{2,})/i", "/([^>])\n([^<])/i"), array("</p>\n<p>", '<br'.($xml == true ? ' /' : '').'>'), trim($string)).'</p>'; else return '<p>'.preg_replace("/([\n]{1,})/i", "</p>\n<p>", trim($string)).'</p>'; }