ColdFusion - 替换值来格式化段落的最佳方法是什么?

时间:2011-09-08 19:32:23

标签: coldfusion user-defined-functions coldfusion-9

我正在使用ColdFusion 9。

我正在从数据库中输出一大块文本直接进入网页。我不希望用户必须编写HTML并搞砸了。所以,我让他们在符号“@@”处插入一个双重来表示一个新的段落。数据存储如下:

 @@This is my first paragraph. @@This will be my second paragraph. @@This is my third.

我想要做的是创建一个函数,将上面的文本块转换为下面的文本块:

 <p>This is my first paragraph.</p>
 <p>This will be my second paragraph.</p>
 <p>This is my third.</p>

我永远不会知道用户是否实际使用过任何@@符号。如果他们没有,我需要将整个块包装在一个p标签中。

我的第一个想法是这样做:

  1. 将整个块包装成p标签。
  2. 将第一次出现的@@替换为“”(无)。
  3. 将所有其他@@替换为</p><p>
  4. 这是完成此任务的正确方法吗?

6 个答案:

答案 0 :(得分:4)

REReplace(your text, "@@([^@]+)", "<p>\1</p>", "all");

应该排序!

答案 1 :(得分:2)

如果你致力于避免HTML(这不是一个坏主意),而你宁愿不使用亨利关于textarea和ParagraphFormat()的想法,我建议使用'@@ '表示段落休息。没有必要用文本作为前缀,因为它们总是至少有一段文字,对吗? (如果他们什么都不输入,你就不需要任何段落了。)

除此之外,是的,只需将@@替换为</p><p>或简单地<p>即可...如果您不需要它们用它来启动文本,那么您的更换过程更容易,因为您可以跳过第2步,如果您只使用<p>而不关闭它,那么您也可以跳过第1步。 (如果你试图创建XHTML,那么你需要使用结束标记,但是你需要处理每个段落的文本更困难的任务......)

答案 2 :(得分:2)

您可以尝试这样的事情:

testParagraph = '@@First graf. @@Second graf. @@Third graf.';
arPara = testParagraph.split('@@');
for( i = 2; i <= arrayLen(arPara); i++ ){ // start at 2 to avoid blank graf
  writeoutput('<p>' & arPara[i] & '</p>');
}

答案 3 :(得分:2)

我喜欢肯的分裂'@@'的做法。但是,我不会简单地从第二个数组项开始。用户可能没有意识到他们需要在第一段之前放置@@,或者他们可能认为他们需要在最后一段之后放置它。我会拆分它,然后测试每个段落以确保它不是空的。如果用户输入正确,则第一个将为空并且不显示。如果他们不这样做,没有犯规。

testParagraph = '@@First graf. @@Second graf. @@Third graf.';
arPara = testParagraph.split('@@');
for( i = 1; i <= arrayLen(arPara); i++ ){ // start at 2 to avoid blank graf
  if (trim(arPara[i]) neq "") writeoutput('<p>' & arPara[i] & '</p>');
}

答案 4 :(得分:1)

为什么不在用户需要编辑的文本区域使用TinyMCE [或类似的东西],编辑器将为您生成所有html,用户既不必使用@@或插入html?

然后,您可以在提交到数据库之前清理用户输入,只要您担心恶意的HTML ....

-Sean

<强>更新

好的 - 那么如何使用list to array函数,测试你的第一个数组元素以确保它不是空的,然后在适当的地方用'

'循环遍历数组? listToArray的分隔符参数有效地删除了你的“@@” - http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_l_21.html

答案 5 :(得分:0)

我认为人们建议处理数据的不同方法是因为你的方法是不必要的......错误......“不太理想”。你在问“问题x”,但是人们可以在“问题x”的前提下看到这个缺陷,因此提供了更好的建议来解决看似有缺陷的前提,这是“问题x”的基础。我认为他们的方法是合理的,作为一个新手(根据你在这里提出的问题来判断,我的意思是),对于提供建议的人来说可能更开放一点:毕竟他们并没有无缘无故地做到这一点,毕竟!

我同意那些建议你修改方法的人,顺便说一句。

但是,要回答您的问题,请执行以下操作:

  • s = reReplace(s,“^ \ s * @@(。*)$”,“

    \ 1

    ”,“ONE”)

    < / p>

  • 将所有@@的实例替换为

就是这样。这里没有什么复杂的。

更好地解决情况 - 如果不是问题 - 将会看看像TinyMCE这样的基于网络的文本编辑器是如何进行微调以允许某些标记的,而不是其他人。无论喜欢与否,这将是一种更好的解决方案。