2012-07-04 50 views

回答

16

CF有这种所谓的使用ParagraphFormat()函数:

<cfset form.userText = paragraphFormat(form.usertext)/> 

从帮助文档 -

替换字符串中的字符:

  • 单换行符(CR/LF序列)与空格
  • 带HTML段落标记的双换行符(<p>

它可能会做更多你想要的,因为它看起来也为双换行,并增加了<p></p>标签。

Ben还有一个名为paragraph2的增强版本(UDF),它很容易修改以获得所需的确切影响。这里的链接:

http://www.cflib.org/udf/ParagraphFormat2

+5

我觉得ParagraphFormat2在这种情况下可能会更好,因为它确实将单行换行转换为“
”(以及双段换行到HTML段落)。 –

10

<cfset localVars.ReturnString = REReplace(localVars.ReturnString, "\r\n|\n\r|\n|\r", "<br />", "all")>

你不应该打\n\r自然,但如果它被谁忘记了正确的顺序一个开发插入它可能发生。

这是一个更广义的函数的一个子集,用于根据你在做什么替换行尾(EOL)字符(例如,必须以Windows/Linux格式,.ics文件,html,cfheaders等)

<cffunction name="ReplaceEOL" access="public" output="false" returntype="string" hint="Replaces EOL codes with other characters"> 
    <cfargument name="String" required="true" type="string"> 
    <cfargument name="ReplaceWith" required="true" type="string"> 

    <cfreturn REReplace(Arguments.String, "\r\n|\n\r|\n|\r", Arguments.ReplaceWith, "all")> 
</cffunction> 
+0

我刚刚修复了第一个示例并简化了代码,但意识到这实际上并不像预期的那样工作 - 在组合版本(最早的匹配在最现代的正则表达式中获胜)之前,单个的'r'和'\ n'匹配,所以需要将它们移动到交替的末尾 - 即。'\ r \ n | \ n \ r | \ n | \ r' - 我继续和固定的为好,但只是想,因为它是非常有用牢记指出来。 –

+1

虽然我个人总是删除所有回车,然后只需要处理换行符,例如'String.replaceAll( '\ r', '')。的replaceAll( '\ n', '
')' –

+0

你说得对。感谢编辑。 – nosilleg

2

您可以使用paragraphFormat()函数,但有时替换函数可以帮助您查看实际发生的情况。

一个例子:<cfset TheText=replace("#form.myText#",chr(13)&chr(10),"<br />","all")>

这将替换所有回车线与HTML换行符饲料

0

其实我更喜欢这样的事情:

<p>#REReplace(theParagraphText, "[#chr(10)#]+", "</p><p>", "ALL")#</p> 

由于整合了多行闯入单段休息。

+0

'[#chr(10)#] +'是写'\ N +'一个冗长的方式 - 但不管是,由于它不处理回车,这是不如由nosilleg给出的[现有答案](http://stackoverflow.com/questions/11330993/how-to-replace-crlf-with-br#11331321)。 –