【问题标题】:Replace line breaks with <p> tags [duplicate]用 <p> 标签替换换行符[重复]
【发布时间】:2014-03-04 21:54:38
【问题描述】:

我有一个带有文本区域的表单,我想将输入中的换行符更改为段落(使用&lt;p&gt; 标签)。我正在使用explode 和implode 将\n 替换为&lt;/p&gt;&lt;p&gt;,但是如果你连续有两个换行符,你最终会得到&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;。我正在尝试使用 foreach 循环遍历每个元素并检查它是否为空来解决这个问题,但它似乎根本不起作用。这是我所拥有的:

foreach($text as $value){
    if($value!=''){
        $newtext.='</p><p>'.$value;
    }
}

对于双倍行距的东西,这仍然会给出&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;。我还尝试用!is_null(trim($value)) 替换if($value!=''),但它仍然没有用。我的代码有什么问题,我该如何解决?

【问题讨论】:

  • 有一个添加&lt;br&gt;标签的函数nl2br,这可能就足够了。如果您想获得&lt;p&gt; 标签,您需要在换行符处拆分并将这些块包装在&lt;p&gt;...&lt;/p&gt; 中。

标签: php


【解决方案1】:

这样的事情会起作用:

$newtext = '<p>' . implode('</p><p>', array_filter(explode("\n", $textarea))) . '</p>';
  1. 通过在换行符处拆分创建数组\n
  2. 过滤掉空元素
  3. p标签一起加入

【讨论】:

    【解决方案2】:

    一个简单的方法是使用preg_split() 得到一个段落数组:

    $paragraphs = preg_split('/\n+/', $yourString);
    

    然后将它们用&lt;p&gt; 包裹起来:

    foreach($paragraphs as $p)
    {
        if(strlen($p) > 0)
        {
            echo "<p>$p</p>";
        }
    }
    

    【讨论】:

      【解决方案3】:
      function text2paragraph( $text ){
          
          $array =  explode("\n", $text);
          
      
          foreach($array as $element){
              if( strlen($element) > 1){
                  $tagged .= '<p>'.$element.'</p>';
                  
              }
          }
          return $tagged;
      }
      

      在“\n”上将文本拆分为数组;

      通过foreach添加'p'标签;

      检查'p'元素是否不为空(如果是空元素,则将其删除);

      返回标记的文本;

      【讨论】:

        猜你喜欢
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-15
        相关资源
        最近更新 更多