【发布时间】:2012-07-05 01:41:12
【问题描述】:
例如:
用户提交带有<textarea name="mytext" cols="35" rows="2"></textarea> 的表单并在其中按ENTER。如何将 CR-LF 替换为 <br />?
【问题讨论】:
标签: coldfusion textarea newline
例如:
用户提交带有<textarea name="mytext" cols="35" rows="2"></textarea> 的表单并在其中按ENTER。如何将 CR-LF 替换为 <br />?
【问题讨论】:
标签: coldfusion textarea newline
CF为此提供了一个名为ParagraphFormat()的函数:
<cfset form.userText = paragraphFormat(form.usertext)/>
来自帮助文档 -
替换字符串中的字符:
<p>)它可能比你想要的更多,因为它还会查找双换行符并添加<p> 和</p> 标签。
Ben 还有一个增强版本(UDF),称为paragraph2,可以轻松修改以获得您想要的确切效果。这是链接:
【讨论】:
<cfset localVars.ReturnString = REReplace(localVars.ReturnString, "\r\n|\n\r|\n|\r", "<br />", "all")>
你不应该自然而然地点击\n\r,但如果它是由忘记正确顺序的开发人员插入的,就会发生这种情况。
这是一个更通用的函数的子集,用于根据您正在执行的操作(例如,必须以 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>
【讨论】:
\r 和 \n 在组合版本之前得到匹配(最早匹配获胜大多数现代正则表达式),因此需要将它们移动到交替的末尾 - .e。 \r\n|\n\r|\n|\r - 我也继续修复了这个问题,但只是想指出它,因为记住它很有用。
String.replaceAll('\r','').replaceAll('\n','<br/>')
在显示值时,我将使用ParagraphFormat 函数,而不是用 br 替换它。
【讨论】:
您可以使用 paragraphFormat() 函数,但有时替换函数可以帮助您可视化实际发生的情况。
一个例子:<cfset TheText=replace("#form.myText#",chr(13)&chr(10),"<br />","all")>
这会将所有回车换行符替换为 html 换行符
【讨论】:
我其实更喜欢这样的:
<p>#REReplace(theParagraphText, "[#chr(10)#]+", "</p><p>", "ALL")#</p>
因为它将多个换行符组合成一个单独的分段符。
【讨论】:
[#chr(10)#]+ 是写\n+ 的冗长方式 - 但不管怎样,由于它不处理回车,这不如existing answer given by nosilleg。