source: branches/comu-ver2/data/smarty_extends/modifier.nl2br_html.php @ 17620

Revision 17620, 1.1 KB checked in by Seasoft, 14 years ago (diff)

「タグ許可」の項目の出力で、出力時に無条件で行末 <br> が付加され、表示が乱れる問題を緩和する試み。
(takahama様ご指摘  http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=2403&forum=2)
・Smarty 修飾子「nl2br_html」を追加。nl2br に比べ、幾つかの条件では行末に <br> を付加しない仕様とする。
・Smarty 修飾子「nl2br」を使用している箇所の一部を「nl2br_html」に変更。

  • Property charset set to UTF-8
  • Property svn:eol-style set to LF
  • Property svn:mime-type set to text/html; charset=UTF-8
Line 
1<?php
2/**
3 * Smarty plugin
4 * @package Smarty
5 * @subpackage plugins
6 */
7
8
9/**
10 * Smarty plugin
11 *
12 * Type:     modifier<br>
13 * Name:     nl2br_html<br>
14 * Date:     Sep 20, 2008
15 * Purpose:  convert \r\n, \r or \n to <<br />>. However, the HTML tag is considered.
16 * Example:  {$text|nl2br_html}
17 * @author   Seasoft 塚田将久
18 * @param string
19 * @return string
20 */
21function smarty_modifier_nl2br_html($string) {
22    $lines = preg_split('/(\\r\\n|\\r|\\n)/', $string);
23    $keys = array_keys($lines);
24    $last_key = end($keys); // 最終行のキー
25    foreach ($keys as $key) {
26        if ($key == $last_key) continue; // 最終行はスキップ
27        $line =& $lines[$key];
28        if (
29            !preg_match('/<\/(address|blockquote|caption|center|col|colgroup|dd|del|dir|div|dl|dt|fieldset|form|frame|frameset|h[1-6]|hr|ins|isindex|legend|li|menu|noframes|noscript|ol|optgroup|option|p|pre|table|tbody|td|tfoot|th|thead|tr|ul)>$/i', $line)
30            && !preg_match('/<[a-z0-9]+\s*[^<]*\/?>$/i', $line)
31        ) {
32            $line .= '<br />';
33        }
34        $line .= "\n";
35    }
36    unset($line);
37   
38    return implode('', $lines);
39}
40
41?>
Note: See TracBrowser for help on using the repository browser.