【问题标题】:function adding in an extra line break?函数添加一个额外的换行符?
【发布时间】:2015-07-06 20:13:23
【问题描述】:

我有一个对表单输入进行清理的函数和另一个对其进行解码的函数。它有点像 bbcode,它在将换行符存储在数据库中时也将换行符转换为<br />(使用nl2br() 函数),然后在将<br /> 放回用于“编辑页面”,用户可以在其中编辑他们的帖子(using str_replace('<br />',"\n",$data))

问题在于,每次对帖子进行解码以进行编辑然后再次编码以进行存储时,每个<br /> 都会变成两个<br /><br />

\n 或 \r 是否等于两个 HTML 换行符?

这是两个函数的代码。

function sanitize2($data) {

  $patterns = array();
    $patterns[0] = '/</';
    $patterns[1] = '/>/';
  $data1 = preg_replace($patterns, "", $data);

  $bopen = substr_count($data1, '[b]') + substr_count($data1, '[B]');
  $bclosed = substr_count($data1, '[/b]') + substr_count($data1, '[/B]');
  $iopen = substr_count($data1, '[i]') + substr_count($data1, '[I]');
  $iclosed = substr_count($data1, '[/i]') + substr_count($data1, '[/I]');
  $uopen = substr_count($data1, '[u]') + substr_count($data1, '[U]');
  $uclosed = substr_count($data1, '[/u]') + substr_count($data1, '[/U]');

    $bx = $bopen - $bclosed;
    $ix = $iopen - $iclosed;
    $ux = $uopen - $uclosed;

    if ($bx > 0) {
        for ($i = 0; $i < $bx; $i++) {
            $data1 .= "[/b]";
        } 
    }
    if ($ix > 0) {
        for ($i = 0; $i < $ix; $i++) {
            $data1 .= "[/i]";
        } 
    }
    if ($ux > 0) {
        for ($i = 0; $i < $ux; $i++) {
            $data1 .= "[/u]";
        } 
    }

  $newer = sanitize($data1);

    $search  = array('[b]', '[/b]', '[i]', '[/i]', '[u]', '[/u]', '[B]', '[/B]', '[I]', '[/I]', '[U]', '[/U]');
    $replace = array('<b>', '</b>', '<i>', '</i>', '<u>', '</u>', '<b>', '</b>', '<i>', '</i>', '<u>', '</u>');

  $newest = str_replace($search, $replace, $newer );

  $final = nl2br($newest);

  return $final;

}

function decode($data) {

$new = str_replace('<br />',"\n",$data);

    $search  = array('[b]', '[/b]', '[i]', '[/i]', '[u]', '[/u]');
    $replace = array('<b>', '</b>', '<i>', '</i>', '<u>', '</u>');

  $newer = str_replace($replace, $search, $new );

  return $newer;
}

更新:

我发现这个页面提供了一种解决方法。显然这是 nl2br() 函数的问题。 :-/

http://websolstore.com/how-to-use-nl2br-and-its-reverse-br2nl-in-php/

【问题讨论】:

  • 应该用换行符存储,然后在需要显示时使用nl2br

标签: php


【解决方案1】:

来自documentation for nl2br

nl2br — 插入 HTML 换行符之前 字符串中的所有换行符

(强调我的)。

它不会替换换行符,它只是插入换行符。因此,如果您尝试通过替换 &lt;br /&gt; 来恢复 nl2br,您将获得两个 \n,一个是旧的,另一个是您在替换 &lt;br /&gt; 时插入的一个。

最简单的解决方法是删除从nl2br 获得的字符串中的所有\n,正确的做法是存储不带&lt;br /&gt; 的文本并在显示时进行转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2011-05-18
    相关资源
    最近更新 更多