nl2br的对面?是str_replace吗?

时间:2010-03-22 18:28:28

标签: php

因此功能nl2br很方便。除了在我的网络应用程序中,我想做相反的事情,将换行符解释为新行,因为它们将被回显为预先填充的表单。

str_replace可以使用<br />并将其替换为我想要的任何内容,但是如果我放入\ n,它会回显字样反斜杠和n。它只有在我的脚本中间放置一个文字换行符并且打破缩进(因此没有尾随空格)时才有效。

请参阅:

    <?=str_replace('<br />','
',$foo)?>

我错过了逃脱角色吗?我想我尝试过各种组合......

7 个答案:

答案 0 :(得分:18)

可能会出现一些代码不够的情况;所以,这样的事情,做你的替代:

$html = 'this <br>is<br/>some<br />text <br    />!';
$nl = preg_replace('#<br\s*/?>#i', "\n", $html);
echo $nl;

即。比简单str_replace; - )

复杂一点

注意:我通常会说不使用正则表达式来操作HTML - 但是,在这种情况下,考虑到正则表达式会非常简单,我想它会没问题。


另请注意,我使用了"\n"

  • 即。换行符:\n
  • 位于double-quoted string中,因此它被解释为换行符,而不是文字\n


基本上,<br>标记通常如下所示:

  • <br>
  • <br/>,在/
  • 之前有任意数量的空格

并且第二点是str_replace不够的地方。

答案 1 :(得分:12)

你想要这个:

<?=str_replace('<br />',"\n",$foo)?>

你可能忘了使用双引号。如果使用双引号,则仅对特殊字符解析字符串。

答案 2 :(得分:12)

你在写'\n'吗?因为\ n只有用双引号括起来才能正确解释:"\n"

偏离主题:<?=语法是邪恶的。请不要为了团队中的其他开发人员而使用它。

答案 3 :(得分:0)

我刚刚跳过nl2br()并以另一种方式使用了这个:

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

一切正常。

有关完整说明,请访问我的博客:

How to use nl2br and reverse br2nl

答案 4 :(得分:0)

    <?php echo strip_tags('Dear<br/>Bidibidi'); ?>
    Dear
    Bidibidi

    <?php echo nl2br('Dear
                Bidibidi'); ?>
    Dear<br/>Bidibidi

http://php.net/manual/tr/function.strip-tags.php

答案 5 :(得分:0)

替代@PascalMARTIN的回答

$string = stri_replace(array(
    '<br>',
    '<br/>',
    '<br />',
), "\n", $string);

它不适用于像<br />这样的多个空格,但这应该是非常罕见的情况。

答案 6 :(得分:0)

如果在输出html之前去除空格(用于缩小),"\n""\r"PHP_EOL等将被去除。 ASCII编码将在剥离过程中幸存下来。

function minify($buffer) {
    return preg_replace('/\s\s+/', ' ', preg_replace('~>\s+<~', '><', $buffer));
}
ob_start('minify');

...

$nl = preg_replace('/\<br(\s*)?\/?\>/i', "&#10;", $br);
echo "<textarea>{$nl}</textarea>";

...

ob_get_flush();