$variable = 'Afrikaans
Shqip - Albanian
Euskara - Basque';
如何将每个新行转换为段落?
$variable
应变成:
<p>Afrikaans</p>
<p>Shqip - Albanian</p>
<p>Euskara - Basque</p>
试试这个:
$variable = str_replace("\n", "</p>\n<p>", '<p>'.$variable.'</p>');
$variable = '<p>' . str_replace("\n", "</p><p>", $variable) . '</p>';
请注意,在其他建议中,可能无法捕获某些换行符。 此功能适用于Windows、Linux或MacOS:
function nl2p($txt){
return str_replace(["\r\n", "\n\r", "\n", "\r"], '</p><p>', '<p>' . $txt . '</p>');
}
$array = explode("\n", $variable);
$newVariable = '<p>'.implode('</p><p>', $array).'</p>'
<?php
$variable = 'Afrikaans
Shqip - Albanian
Euskara - Basque';
$prep0 = str_replace(array("\r\n" , "\n\r") , "\n" , $variable);
$prep1 = str_replace("\r" , "\n" , $prep0);
$prep2 = preg_replace(array('/\n\s+/' , '/\s+\n/') , "\n" , trim($prep1));
$result = '<p>'.str_replace("\n", "</p>\n<p>", $prep2).'</p>';
echo $result;
/*
<p>Afrikaans</p>
<p>Shqip - Albanian</p>
<p>Euskara - Basque</p>
*/
?>
说明:
$prep0和$prep1:确保每行以\n结尾。
$prep2:删除冗余的空格。保留换行符。
$result:添加p标签。
如果不包括$prep0、$prep1和$prep2,$result将会是这样的:
<p>Afrikaans
</p>
<p>Shqip - Albanian
</p>
<p>Euskara - Basque</p>
不太好,我认为。
此外,除非必须使用 preg_replace,否则不要使用。在大多数情况下,str_replace 更快(根据我的经验)。请参阅下面的评论以获取更多信息。
尝试:
$variable = 'Afrikaans
Shqip - Albanian
Euskara - Basque';
$result = preg_replace("/\r\n/", "<p>$1</p>", $variable);
echo $result;
我知道这是一个非常古老的帖子,但我想强调,建议的解决方案在HTML世界中可能会有一些问题:
p
标签。这可能会导致额外的段落。至少一些浏览器会将其显示为额外的段落,意味着 <p>line1<p>line2</p>line3</p>
将会产生 3 个段落,这可能不是意图。p
内部,根据 phrasing content
的 spec。或者说只有一组有限的标签可以出现。pre
和 textarea
中进行更改。 code
、samp
、kbd
和 var
是其他常见值的示例,但从技术上讲,它可以是任何具有 white-space
CSS 属性设置为 pre
、pre-wrap
、pre-line
或 break-spaces
的标签。\r\n
或仅 \r
或 \n
,而实际上有更多的符号表示换行,并且它们还具有相应的 HTML 实体,这在 HTML 字符串中很容易出现。<li>
项,并具有“改进”的nl2br
逻辑(主要是为了保留空格)。