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

Posted

技术标签:

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

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

谢谢

【问题讨论】:

How to remove line breaks (no characters!) from the string?的可能重复 【参考方案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 ***!';
out($var, 'Label');

【讨论】:

【参考方案3】:

对于换行符,PHP 为 "\n" (参见double quote strings)PHP_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 或两者结合。

【讨论】:

以上是关于优雅的换行解决方案 (PHP)的主要内容,如果未能解决你的问题,请参考以下文章

设置MyEclipse中代码的换行长度

.不同操作系统的换行

.不同操作系统的换行

如何防止表格单元格(不是单个单元格)的列中的换行?

怎么解决linux中的TXT在win7中的排序问题,linux中的换行在win7中不适用了。

html中span标签的换行