【问题标题】:Elegant solution for line-breaks (PHP)优雅的换行解决方案 (PHP)
【发布时间】:2011-02-13 04:29:28
【问题描述】:
$var = "Hi there"."<br/>"."Welcome to my website"."<br/>;"
echo $var;

有没有一种优雅的方式来处理 PHP 中的换行符?我不确定其他语言,但 C++ 有 eol,所以使用起来更易读、更优雅?

谢谢

【问题讨论】:

标签: php line-breaks


【解决方案1】:

不是很“优雅”而且有点浪费,但如果你真的关心代码的外观,你可以制作自己的精美标志,然后执行 str_replace。

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 />

我将第一种方法称为“中指风格”,第二种方法称为“山羊风格”。

【讨论】:

    【解决方案2】:

    我最终编写了一个到目前为止对我很有效的函数:

    // 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');
    

    【讨论】:

      【解决方案3】:

      对于换行符,PHP 为 "\n" (参见double quote stringsPHP_EOL

      这里,您使用的是&lt;br /&gt;,这不是 PHP 换行符:它是 HTML 换行符。


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

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

      或者,使用 PHP 换行符:

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

      注意:您可能还想看看nl2br() 函数,它在\n 之前插入&lt;br&gt;

      【讨论】:

      • nl2br() 实际上并没有将换行符转换&lt;br/&gt;。它的作用是返回给定的字符串,并在所有换行符之前插入&lt;br /&gt;&lt;br&gt;
      • 当我的 php 返回“您好。\n欢迎。”在 API 调用中,然后我在我的应用程序中记录输出,它显示为 Hi there.\nWelcome.,\n 完好无损(未转换为换行符。)如何让 php 将实际的 \n 换行符插入到返回结果中? (哦!这与结果是json_encode-ed 的事实有关吗?伙计,这很烦人!好的,我该如何解决那个??)谢谢!
      • @Olie - json_encode 应该无关紧要。仔细检查您是否使用双引号。当 \n 在单引号内时,它将按字面意思解释。
      【解决方案4】:

      在 php 换行符中,我们可以使用 PHP_EOL (END of LINE)。它作为 "\n" 但它不能在 HTML 页面上显示。因为我们必须给 HTML 中断来打破行..

      所以你可以使用define来使用它

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

      那你就可以叫它了

      【讨论】:

        【解决方案5】:

        我已经定义了这个:

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

        之后,在我想使用\n的任何地方使用LNBR

        【讨论】:

          【解决方案6】:

          \n 对我不起作用。 \n 出现在我发送的电子邮件的正文中。这就是我解决它的方法。

          str_pad($input, 990); //以便空格将填充到 990 截断处。

          【讨论】:

            【解决方案7】:

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

            正如之前的回答者所提到的,“&lt;br/&gt;" 不是传统意义上的换行符,而是 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 回显/打印语句中对 HTML 进行硬编码。如果您可以将 HTML 保留在代码之外,那么从长远来看,它会使事情变得更加灵活和可维护。

            【讨论】:

              【解决方案8】:

              因为要输出到浏览器,所以必须使用&lt;br/&gt;。否则有\n\r 或两者结合。

              【讨论】:

                猜你喜欢
                • 2018-04-28
                • 1970-01-01
                • 2015-10-12
                • 2011-03-31
                • 1970-01-01
                • 1970-01-01
                • 2023-03-19
                • 1970-01-01
                • 2010-10-06
                相关资源
                最近更新 更多