换行问题(nl2br)

时间:2013-07-16 01:56:54

标签: php newline

我的代码如下:

  • 文字来到服务器(来自textarea)
  • 文本通过trim()然后nl2br
  • 运行

但正在发生的事情是添加<br>但不删除新行

"

something"

变为

"<br>

something"

增加了一条双新线。请帮助此错误破坏所有格式,我可以根据请求提供更多代码。

创建帖子: 缩短创建方法(仅显示相关位)创建方法:

BlogPost::Create(ParseStr($_POST['Content']));

ParseStr运行:

return nl2br(trim($Str));

查看帖子:

echo "<span id='Content'>".BlogPosts::ParseBB(trim($StoredPost->Content))."</span>";

ParseBB运行:

    $AllowedTags = array(
    //  i => Tag, Tag Replacement, Closing tag
        0 => array("code","pre class='prettyprint'",true),
        1 => array("center","span style='text-align:center;'",true),
        2 => array("left","span style='text-align:right;'",true),
        3 => array("right","span style='text-align:left;'",true)
    );
    $AllowedTagsStr = "<p><a><br><br/><b><i><u><img><h1><h2><h3><pre><hr><iframe><code><ul><li>";
    $ParsedStr = $Str;

    foreach($AllowedTags as $Tag)
    {
        $ParsedStr = str_replace("<".$Tag[0].">","<".$Tag[1].">",$ParsedStr);
        if($Tag[2])
            $ParsedStr = str_replace("</".$Tag[0].">","</".$Tag[1].">",$ParsedStr);
    }


    return strip_tags($ParsedStr,$AllowedTagsStr);

实施例: 我所看到的: 显示的内容:

2 个答案:

答案 0 :(得分:0)

你不是在使用UTF-8字符集吗?如果您使用多字节字符集(即UTF-8),修剪将无法正常工作。您必须使用多字节功能。尝试类似这样的事情:http://www.php.net/manual/en/ref.mbstring.php#102141

<pre>内,你不需要调用nl2br函数来显示断行。

在创建帖子时,检查是否确实要调用nl2br。您可能只在显示它时才需要它。

答案 1 :(得分:0)

这是因为nl2br()根本没有删除新行。

  

返回在所有换行符之前插入<br /><br> 的字符串\r\n\n\r\n和{{1 }})。

改为使用\r

str_replace