代码之家  ›  专栏  ›  技术社区  ›  eozzy

优雅的换行解决方案(PHP)

  •  26
  • eozzy  · 技术社区  · 15 年前
    $var = "Hi there"."<br/>"."Welcome to my website"."<br/>;"
    echo $var;
    

    有没有一种优雅的方法来处理PHP中的换行符?我不确定其他语言,但C++有 eol 那么,一些更易读、更优雅的东西可以使用吗?

    谢谢

    8 回复  |  直到 8 年前
        1
  •  44
  •   Vinod VT    9 年前

    对于换行符,php为 "\n" (见 double quote strings ) PHP_EOL .

    这里,你用的是 <br /> 它不是PHP换行符:它是HTML换行符。


    在这里,你可以简化你发布的内容 (带HTML换行符) :不需要字符串串联:您可以将所有内容只放在一个字符串中,如下所示:

    $var = "Hi there<br/>Welcome to my website<br/>";
    

    或者,使用php换行符:

    $var = "Hi there\nWelcome to my website\n";
    

    注意:您可能还想看看 nl2br() 函数,插入 <br> 之前 \n .

        2
  •  6
  •   Daniel Beck TheVyom    10 年前

    我已经定义了:

    if (PHP_SAPI === 'cli')
    {
       define( "LNBR", PHP_EOL);
    }
    else
    {
       define( "LNBR", "<BR/>");
    }
    

    使用后 LNBR 我想去哪儿都行 \n .

        3
  •  2
  •   Kolitha Warnakulasooriya    10 年前

    在php换行符中,我们可以使用php-eol(行尾),它的作用是\n 但是它不能在ht ml页面上显示,因为我们必须给ht ml一个分隔符来分隔行。

    所以可以使用define

    define ("EOL","<br>");
    

    那你可以叫它

        4
  •  2
  •   eozzy    8 年前

    我最后写了一个迄今为止对我很有效的函数:

    // pretty print data
    function out($data, $label = NULL) {
    
      $CLI = (php_sapi_name() === 'cli') ? 'cli' : '';
    
      $gettype = gettype($data);
    
      if (isset($label)) {
        if ($CLI) { $label = $label . ': '; }
        else { $label = '<b>'.$label.'</b>: '; }
      }
    
      if ($gettype == 'string' || $gettype == 'integer' || $gettype == 'double' || $gettype == 'boolean') {
        if ($CLI) { echo $label . $data . "\n"; }
        else { echo $label . $data . "<br/>"; }
      }
      else {
        if ($CLI) { echo $label . print_r($data,1) . "\n"; } 
        else { echo $label . "<pre>".print_r($data,1)."</pre>"; }
      }
    }
    
    
    // Usage
    
    out('Hello world!');
    
    $var = 'Hello Stackoverflow!';
    out($var, 'Label');
    
        5
  •  1
  •   Shehary    8 年前

    不是很“优雅”,有点浪费,但是如果你真的关心代码的外观,你可以制作自己喜欢的标志,然后做一个str_替换。

    Example:<br />
    $myoutput =  "After this sentence there is a line break.<b>.|..</b> Here is a new line.";<br />
    $myoutput =  str_replace(".|..","&lt;br />",$myoutput);<br />
    

    how about:<br />
    $myoutput =  "After this sentence there is a line break.<b>E(*)3</b> Here is a new line.";<br />
    $myoutput =  str_replace("E(*)3","&lt;br />",$myoutput);<br />
    

    我把第一种方法叫做“中指式”,第二种叫做“山羊式”。

        6
  •  0
  •   Sarfraz    15 年前

    因为您要输出到浏览器,所以必须使用 <br/> . 否则 \n \r 或者两者结合。

        7
  •  0
  •   mkgrunder    15 年前

    嗯,和任何语言一样,有几种方法可以做到这一点。

    正如之前的回答者所提到的, <br/>" 不是传统意义上的换行符,而是HTML换行符。我不知道有内置的php常量,但您始终可以定义自己的:

    // Something like this, but call it whatever you like
    const HTML_LINEBREAK = "<br/>";
    

    如果要输出一组行(例如,从字符串数组中),可以这样使用:

    // Output an array of strings
    $myStrings = Array('Line1','Line2','Line3');
    echo implode(HTML_LINEBREAK,$myStrings);
    

    但是,一般来说,我会说避免在php echo/print语句中对HTML进行硬编码。如果您可以将HTML保持在代码之外,那么从长远来看,它会使事情变得更加灵活和可维护。

        8
  •  -1
  •   Hamish Ahern    12 年前

    \ N不适合我。将显示在我发送的电子邮件的正文中。我就是这样解决的。

    str_pad($input,990);//这样,空间将填充到990截止点。

    推荐文章