nl2br()与nl2p()函数,php在字符串中的新行(\n)之前插入换行符

nl2br()与nl2p()函数,php在字符串中的新行(\n)之前插入换行符

   使用情景

很多场合我们只是简单用textarea获取用户的长篇输入,而没有用编辑器。用户输入的换行以“\n”的方式入库,输出的时候有时候会没有换行,一大片文字直接出来了。这个时候可以根据库里的“\n”给文字换行。PHP有自带的函数nl2br(),我们也可以自定义函数nl2p()。

先来看看nl2br() 函数吧。

定义和用法

nl2br() 函数在字符串中的每个新行 (\n) 之前插入 HTML 换行符 (<br />)。

一个简单的例子:

     <?php
    $str = "Welcome to
    www.nowamagic.net";
    echo nl2br($str);
    ?>

运行结果的HTML代码:
    Welcome to <br />
    www.nowamagic.net

nl2p
nl2br 有个缺点,比如要用CSS做到段落缩进就比较麻烦,这个时候就需要 nl2p 了。将br换行换成段落p换行,比较简单是直接替换:

<?php function nl2p($text) { return "<p>" . str_replace("\n", "</p><p>", $text) . "</p>"; } ?>

比较详细的函数,可以试下:

/**
     * Returns string with newline formatting converted into HTML paragraphs.
     *
     * @param string $string String to be formatted.
     * @param boolean $line_breaks When true, single-line line-breaks will be converted to HTML break tags.
     * @param boolean $xml When true, an XML self-closing tag will be applied to break tags (<br />).
     * @return string
     */
    function nl2p($string, $line_breaks = true, $xml = true)
    {
        // Remove existing HTML formatting to avoid double-wrapping things
        $string = str_replace(array('<p>', '</p>', '<br>', '<br />'), '',$string);
        // It is conceivable that people might still want single line-breaks
        // without breaking into a new paragraph.
        if ($line_breaks == true)
            return '<p>'.preg_replace(array("/([\n]{2,})/i","/([^>])\n([^<])/i"), array("</p>\n<p>", '<br'.($xml == true ? ' /' :'').'>'), trim($string)).'</p>';
        else
            return '<p>'.preg_replace("/([\n]{1,})/i", "</p>\n<p>", trim($string)).'</p>';
    }

https://www.cnblogs.com/hejianrong/p/5802010.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113541.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Cocos creator 微信小游戏排行榜「建议收藏」

    Cocos creator 微信小游戏排行榜「建议收藏」Cocoscreator版本:2.0.10主域动态刷新子域首先得知道主域和子域的关系,需要让子域(开放域)里的排行榜信息动态刷新在主域的页面中,需要在主域中的节点上挂载WXSubContextView组件。子域中,可以添加Widget组件、滚动的节点来实现上下或者左右滑动。这里主要记录排行榜的实现。(这里只实现了同玩好友排行榜的功能,同玩群好友可以另实现)实现排行榜步骤一:需要实现…

    2022年10月27日
  • MySQL设计之三范式的理解

    MySQL设计之三范式的理解

    2021年11月10日
  • android监听进程杀死_安卓进程管理

    android监听进程杀死_安卓进程管理今天在编写application通用组件时,需要在低内存的回调中杀死进程,所以找了下androd傻进程的方法,总结下来有下面几种:根据进程名称杀进程android.os.Process.killProcess(android.os.Process.myPid());代码本身没什么可以说的,需要注意的是,当进程在前台时,会杀死现有进程,然后再重新启动改线程,类似于手机的重启。但是只要我们把…

    2022年9月4日
  • collections判断list是否为空_collectionutils

    collections判断list是否为空_collectionutils项目中引用的明明是commons.collections-3.2.1.jar(3.2版的),但服务器启动后,调用CollectionUtils.isNotEmpty方法时,却总是报NoSuchMethodError:org.apache.commons.collections.CollectionUtils.isNotEmpty(Ljava/util/Collection;)Z

    2022年10月7日
  • vue 父组件调用子组件_react父组件向子组件传值

    vue 父组件调用子组件_react父组件向子组件传值Vue中子组件调用父组件的三种方法:1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。父组件<template><div><child></child></div></template><script>importchildfrom’./components/childcomponent’;exportdefault{co

    2022年10月3日
  • CSS文字大小单位px、em、pt(转)

    CSS文字大小单位px、em、pt(转)

    2021年8月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号