$variable = 'Afrikaans Shqip - Albanian Euskara - Basque';
如何将每一个新行转换为段落?
$variable应变为:
$variable
<p>Afrikaans</p> <p>Shqip - Albanian</p> <p>Euskara - Basque</p>
jecbmhm31#
试试看:
$variable = str_replace("\n", "</p>\n<p>", '<p>'.$variable.'</p>');
hfyxw5xn2#
下面的代码应该可以做到这一点:
$variable = '<p>' . str_replace("\n", "</p><p>", $variable) . '</p>';
luaexgnf3#
请注意,对于其他建议,有些换行符无法捕捉。此函数适用于Windows、Linux或MacOS:
function nl2p($txt){ return str_replace(["\r\n", "\n\r", "\n", "\r"], '</p><p>', '<p>' . $txt . '</p>'); }
zhte4eai4#
$array = explode("\n", $variable); $newVariable = '<p>'.implode('</p><p>', $array).'</p>'
shyt4zoc5#
<?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更快(至少根据我的经验)。请参阅下面的评论以了解更多信息。
vuktfyat6#
请尝试:
$variable = 'Afrikaans Shqip - Albanian Euskara - Basque'; $result = preg_replace("/\r\n/", "<p>$1</p>", $variable); echo $result;
cbjzeqam7#
我知道这是一个非常古老的主题,但我想强调的是,建议的解决方案在HTML世界中可能会有一些问题:1.它们不会检查段落周围是否已经有p标签,这可能会导致额外的段落,至少有些浏览器会将其显示为额外的段落,这意味着<p>line1<p>line2</p>line3</p>将导致3个段落,这可能不是本意。1.事实上,根据phrasing content的规范,p中有一堆标签是不应该存在的。
p
<p>line1<p>line2</p>line3</p>
phrasing content
pre
textarea
code
samp
kbd
var
white-space
pre-wrap
pre-line
break-spaces
\r\n
\r
\n
<li>
nl2br
7条答案
按热度按时间jecbmhm31#
试试看:
hfyxw5xn2#
下面的代码应该可以做到这一点:
luaexgnf3#
请注意,对于其他建议,有些换行符无法捕捉。此函数适用于Windows、Linux或MacOS:
zhte4eai4#
shyt4zoc5#
说明:
$prep0和$prep1:确保每行都以\n结尾。
$prep2:删除多余的空格。保留换行符。
$result:添加p标记。
如果不包括$prep0、$prep1和$prep2,则$result将如下所示:
我觉得不太好。
另外,除非必要,否则不要使用preg_replace。在大多数情况下,str_replace更快(至少根据我的经验)。请参阅下面的评论以了解更多信息。
vuktfyat6#
请尝试:
cbjzeqam7#
我知道这是一个非常古老的主题,但我想强调的是,建议的解决方案在HTML世界中可能会有一些问题:
1.它们不会检查段落周围是否已经有
p
标签,这可能会导致额外的段落,至少有些浏览器会将其显示为额外的段落,这意味着<p>line1<p>line2</p>line3</p>
将导致3个段落,这可能不是本意。1.事实上,根据
phrasing content
的规范,p
中有一堆标签是不应该存在的。pre
和textarea
是您通常希望的标记。code
、samp
、kbd
和var
是其他常见值的示例,但从技术上讲,它可以是任何将white-space
CSS属性设置为pre
、pre-wrap
、pre-line
或break-spaces
中的一个或多个。1.它们通常只检查
\r\n
或\r
或\n
,而实际上有更多的符号,这意味着新行,它们也有各自的HTML实体,这很容易出现在HTML字符串中。为了在一定程度上“对抗”这些缺陷,我刚刚发布了一个nl2tag库,它也可以将新行“转换”为
<li>
项,并且具有“改进的”nl2br
逻辑(主要是为了保留空格)。它还远远不够完美(查看自述文件了解限制),但应该可以满足相对简单的HTML字符串的需要。