用户格式化文本的文本缩进

时间:2014-05-13 23:26:06

标签: php html css

我想使用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

由于

2 个答案:

答案 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

http://3v4l.org/b0AhL

这几乎是Markdown所做的(以及纺织品和那些):1换行= BR(不完全在Markdown中)和2换行= P.我总是使用简单的Markdown来渲染纯文本。

答案 1 :(得分:1)

当您提交textarea而不是使用CSS仅缩进第一行时,您可以使用&nbsp;(不间断空格)。

当您提交文本区域时,我假设您抓住它:

$userText = $_POST['description']

好吧,在您提交到数据库之前,您可以使用简单的替换 - 获取文本后:

$userText = str_replace("\n", "\n &nbsp;&nbsp;&nbsp;&nbsp;", $userText);

然后将其提交给数据库。当它返回时,nl2br仍会将\n变为<br />然后它不会看到&nbsp;,尽管HTML会将它们视为四个空格(相等)缩进)。

很脏,但很简单!

参考:http://www.w3schools.com/php/func_string_str_replace.asp