我正在使用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标签中。
我的第一个想法是这样做:
</p><p>
这是完成此任务的正确方法吗?
答案 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这样的基于网络的文本编辑器是如何进行微调以允许某些标记的,而不是其他人。无论喜欢与否,这将是一种更好的解决方案。