优雅的换行解决方案 (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(".|..","<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","<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
。
这里,您使用的是<br />
,这不是 PHP 换行符:它是 html 换行符。
在这里,您可以简化您发布的内容 (带有 HTML 换行符):不需要字符串连接:您可以将所有内容放在一个字符串中,如下所示:
$var = "Hi there<br/>Welcome to my website<br/>";
或者,使用 PHP 换行符:
$var = "Hi there\nWelcome to my website\n";
注意:您可能还想看看nl2br()
函数,它在\n
之前插入<br>
。
【讨论】:
nl2br()
实际上并没有将换行符转换为<br/>
。它的作用是返回给定的字符串,并在所有换行符之前插入<br />
或<br>
。
当我的 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】:嗯,与任何语言一样,有几种方法可以做到这一点。
正如之前的回答者所提到的,“<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 回显/打印语句中对 HTML 进行硬编码。如果您可以将 HTML 保留在代码之外,那么从长远来看,它会使事情变得更加灵活和可维护。
【讨论】:
【参考方案8】:因为要输出到浏览器,所以必须使用<br/>
。否则有\n
和\r
或两者结合。
【讨论】:
以上是关于优雅的换行解决方案 (PHP)的主要内容,如果未能解决你的问题,请参考以下文章