我想使用text-indent属性(或类似的东西)来添加每个段落第一行的缩进。
首先,用户可以在textarea中写下他的文本,然后将其保存在数据库中。
当我想显示此文本时,我使用:
$exhib = $res->fetch_array();
echo "<div class='infoContent'>". nl2br($exhib['description']) . "</p></div>";
用户的行返回在数据库中存储为\n
,并由<br />
修改为nl2br
。用我的CSS:
.infoContent
{
text-indent: 10px;
}
只有第一行缩进。 (正常行为)。
问:如何在<br />
代码后为每一行自动缩进?
我尝试了一个丑陋的解决方案,但它不起作用,因为空段<p></p>
没有创建另一行返回(如果用户输入2行返回\ n \ n)。
echo "<div class='infoContent'><p>" . str_replace("<br />", "</p><p>", nl2br($exhib['description'])) . "</p></div>";
我可以用<p></p>
替换<br />
代码,但它似乎是非常不好的解决方案...
修改 JSfiddle
由于
答案 0 :(得分:2)
\n\n
通常表示新段落(输入)。段落之间的空白是CSS,实际上是默认的浏览器样式(我认为1em
?)。 \n
是<br>
(shift + enter)。
所以不要使用nl2br()
并自己动手:
$text = '<p>' . htmlspecialchars($text) . '</p>'; // HTML ENCODE!
$text = preg_replace('#\n\n\n*#', '</p><p>', $text); // 2 or more \n
$text = preg_replace('#\n#', '<br />', $text); // all left-over \n
$text = preg_replace('#><#', ">\n<", $text); // if you like </p>\n<p> with a newline between, like I do
这几乎是Markdown所做的(以及纺织品和那些):1换行= BR(不完全在Markdown中)和2换行= P.我总是使用简单的Markdown来渲染纯文本。
答案 1 :(得分:1)
当您提交textarea而不是使用CSS仅缩进第一行时,您可以使用
(不间断空格)。
当您提交文本区域时,我假设您抓住它:
$userText = $_POST['description']
好吧,在您提交到数据库之前,您可以使用简单的替换 - 获取文本后:
$userText = str_replace("\n", "\n ", $userText);
然后将其提交给数据库。当它返回时,nl2br仍会将\n
变为<br />
然后它不会看到
,尽管HTML会将它们视为四个空格(相等)缩进)。
很脏,但很简单!