0

我的代码工作如下:

  • 文本到达服务器(来自 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);

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

4

2 回答 2

1

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

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

改用str_replace

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
于 2015-03-03T00:00:09.440 回答
0

你不是使用 UTF-8 字符集吗?如果您使用多字节字符集(即 UTF-8),trim 将无法正常工作。您必须使用多字节函数。试试这样的:http ://www.php.net/manual/en/ref.mbstring.php#102141

在里面<pre>你不应该需要调用 nl2br 函数来显示断线。

检查您是否真的想在创建帖子时调用 nl2br。您可能仅在显示时才需要它。

于 2013-07-16T02:14:03.327 回答