如何用<br />替换CR+LF?
Posted
技术标签:
【中文标题】如何用<br />替换CR+LF?【英文标题】:How to replace CR+LF with <br />? 【发布时间】:2012-07-05 01:41:12 【问题描述】:例如:
用户提交带有<textarea name="mytext" cols="35" rows="2"></textarea>
的表单并在其中按ENTER。如何将 CR-LF 替换为 <br />
?
【问题讨论】:
【参考方案1】:CF为此提供了一个名为ParagraphFormat()的函数:
<cfset form.userText = paragraphFormat(form.usertext)/>
来自帮助文档 -
替换字符串中的字符:
带空格的单个换行符(CR/LF 序列) 带有 html 段落标签的双换行符 (<p>
)
它可能比你想要的更多,因为它还会查找双换行符并添加<p>
和</p>
标签。
Ben 还有一个增强版本(UDF),称为paragraph2,可以轻松修改以获得您想要的确切效果。这是链接:
http://www.cflib.org/udf/ParagraphFormat2
【讨论】:
我认为 ParagraphFormat2 在这种情况下可能会更好,因为它确实将单换行符变成“”(以及双换行符变成 HTML 段落)。【参考方案2】:<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/>')
【参考方案3】:
在显示值时,我将使用ParagraphFormat 函数,而不是用 br 替换它。
【讨论】:
【参考方案4】:您可以使用 paragraphFormat() 函数,但有时替换函数可以帮助您可视化实际发生的情况。
一个例子:<cfset TheText=replace("#form.myText#",chr(13)&chr(10),"<br />","all")>
这会将所有回车换行符替换为 html 换行符
【讨论】:
【参考方案5】:我其实更喜欢这样的:
<p>#REReplace(theParagraphText, "[#chr(10)#]+", "</p><p>", "ALL")#</p>
因为它将多个换行符组合成一个单独的分段符。
【讨论】:
[#chr(10)#]+
是写\n+
的冗长方式 - 但不管怎样,由于它不处理回车,这不如existing answer given by nosilleg。以上是关于如何用<br />替换CR+LF?的主要内容,如果未能解决你的问题,请参考以下文章