【问题标题】:Displaying multiple paragraphs from a text content in a SQL server table在 SQL Server 表中显示文本内容的多个段落
【发布时间】:2014-12-16 03:04:45
【问题描述】:

我的 SQL 服务器中有一个包含一长串文本的列。 (PAGE_CONTENT)我可以在我的网站上显示它,只是它的显示就像在 SQL 服务器表中一样......一个巨大的段落......阅读一点也不有趣:(我的原始设计有这个内容被破坏了<br/> tags....所以,我的问题是,如果我需要段落中的输出,我是否需要制作一堆 PAGE_CONTENT_P1、PAGE_CONTENT_P2、....PAGE_CONTENT_Pnth?这对我来说似乎是错误的。

那么如何设置我的字符串生成器,以便将文本分成段落?

这就是我现在的样子。如果您需要查看任何其他代码,请告诉我。谢谢

sb.Append("<h1 class=\"title\">" + ds.Tables[0].Rows[i]["PAGE_TITLE"].ToString() + "</h1> ");
sb.Append("<div class=\"row\">");
sb.Append("<div class=\"col-md-12 history\">");
sb.Append("<p class=\"text-justify\">" + ds.Tables[0].Rows[i]["PAGE_CONTENT"].ToString() + "</p> ");
sb.Append("</div>");
sb.Append("</div>");

【问题讨论】:

  • 您是否打算在数据库列中允许 HTML?内容是否可以修改为包含的占位符,您将用 HTML 替换,例如{br} 会变成换行符,用于输出?
  • 这可能适用于这种特殊情况,但如果我允许客户使用 CMS 更改此内容,我怀疑客户是否会在段落之后插入
    。所以我有点需要它能够尊重数据库内外的段落格式。但是现在,我只是担心从数据库中分段出去
  • 如果不是很清楚,我的意思是:为什么不翻译出来呢?在["PAGE_CONTENT"].ToString() 之后添加.Replace("\n", "&lt;/p&gt;&lt;p class=\"text-justify\"&gt;")。还是我错过了什么?
  • @srutzky 成功了!请添加作为答案,我想为此感谢您。另外,其他人也可以学习。再次感谢
  • 如果你只是用 HTML 标签直接替换字符串中的文本,那么你不能对输出进行 HTML 编码。这意味着原始字符串中的任何 HTML 片段,例如有点邪恶的脚本,将被输出。这也意味着原始字符串必须已经具有 HTML 编码的值,例如 & 字符。

标签: c# asp.net sql-server ado.net


【解决方案1】:

鉴于当前的代码,一种选择是在退出时简单地替换换行符(已经在内容中)。

当前行已经包含了开始和结束&lt;p&gt;标签:

sb.Append("<p class=\"text-justify\">" + ... + "</p> ");

因此,最简单的做法是将换行符转换为结束标签和开始标签(即&lt;/p&gt;&lt;p&gt;):

...["PAGE_CONTENT"].ToString().Replace("\n", "</p><p class=\"text-justify\">")

当然,通过首先对内容进行 HTML 编码来防止恶意的嵌入 HTML/脚本可能更安全:

HttpUtility.HtmlEncode(
     ds.Tables[0].Rows[i]["PAGE_CONTENT"].ToString()
  ).Replace("\n", "</p><p class=\"text-justify\">")

而且,正如@HABO 在对该问题的评论中所建议的那样,最灵活的方法是执行以下操作:

sb.AppendLine("<div class=\"col-md-12 history\">");
foreach(string _Paragraph in
          ds.Tables[0].Rows[i]["PAGE_CONTENT"].ToString().Split(new Char[] {'\n'}))
{
  sb.AppendLine("<p class=\"text-justify\">");
  sb.AppendLine(HttpUtility.HtmlEncode(_Paragraph));
  sb.AppendLine("</p>");
}
sb.AppendLine("</div>");

【讨论】:

  • 我添加了代码的最后一部分。我收到一个错误:非静态字段、方法或属性 'system.web.httpserverutility.htmlencode(string) 需要对象引用
  • @LOTUSMS 尝试将HttpServerUtility 更改为HttpUtility,如果不起作用,请将其更改为WebUtility
  • HttpUtility 工作。我不明白,但它起作用了。我会深入挖掘你帮助我解决的问题。我不想机械地去做,我想理解它。非常感谢
【解决方案2】:
<div style="width:500px;height:150px;overflow-y: scroll;">... your long text </div>

试试这个,如果有帮助就使用它

【讨论】:

  • 很抱歉@Mudeyanse,但在内容中添加滚动条不是正确的方法,也不是很美观。更不用说我指定我要把我的段落分成几个段落。这不这样做
猜你喜欢
  • 2012-10-04
  • 1970-01-01
  • 2012-11-15
  • 2018-05-09
  • 1970-01-01
  • 2010-11-10
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多