2012-07-04 30 views

Trả lời

16

CF có một chức năng cho gọi ParagraphFormat này():

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

Từ các tài liệu giúp đỡ -

Thay thế ký tự trong một chuỗi:

  • Độc ký tự xuống dòng (CR/LF chuỗi) với dấu cách
  • Ký tự dòng mới đôi với thẻ đoạn HTML (<p>)

Nó có thể làm hơn hơn bạn muốn ở chỗ nó cũng sẽ cho ngắt dòng đôi và cho biết thêm <p></p> thẻ.

Ben cũng có phiên bản nâng cao (UDF) được gọi là paragraph2 có thể dễ dàng sửa đổi để có được ảnh hưởng chính xác mà bạn muốn. Đây là liên kết:

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

+5

Tôi nghĩ ParagraphFormat2 có thể tốt hơn trong trường hợp này vì nó biến ngắt dòng đơn thành "
" (cũng như ngắt dòng kép thành đoạn HTML). –

2

Thay vì thay thế nó bằng BR Tôi sẽ sử dụng các chức năng ParagraphFormat khi hiển thị các giá trị.

10

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

Bạn không nên nhấn \n\r một cách tự nhiên, nhưng nó có thể xảy ra nếu nó được chèn vào bởi một dev đã bị lãng quên theo đúng thứ tự.

Đó là tập hợp con của một hàm tổng quát hơn để thay thế các ký tự cuối dòng (EOL) bằng một cái gì đó khác dựa trên những gì bạn đang làm (ví dụ: phải ghi ra trong định dạng Windows/Linux, tệp .ics, html, cfheaders , vv)

<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

Tôi vừa sửa ví dụ đầu tiên của bạn và đơn giản hóa mã, nhưng nhận ra điều này sẽ không thực sự hoạt động như dự định - cá nhân '\ r' và' \ n' được so khớp trước phiên bản kết hợp (trận đấu sớm nhất thắng trong regex hiện đại nhất), vì vậy cần thiết để di chuyển chúng đến cuối của luân phiên - .e.'\ r \ n | \ n \ r | \ n | \ r' - Tôi đã tiếp tục và sửa nó, nhưng chỉ muốn chỉ ra nó vì nó rất hữu ích để ghi nhớ. –

+1

Mặc dù cá nhân tôi luôn loại bỏ tất cả lợi nhuận vận chuyển và sau đó chỉ phải xử lý các dòng mới, ví dụ: 'String.replaceAll ('\ r', ''). ReplaceAll ('\ n', '
')' –

+0

Bạn nói đúng. Cảm ơn bạn đã chỉnh sửa. – nosilleg

2

Bạn có thể sử dụng hàm paragraphFormat() nhưng đôi khi chức năng thay thế giúp bạn hình dung những gì đang thực sự xảy ra.

Một ví dụ: <cfset TheText=replace("#form.myText#",chr(13)&chr(10),"<br />","all")>

này thay thế tất cả vận chuyển trở lại dòng nguồn cấp dữ liệu với một ngắt dòng html

0

Tôi thực sự thích một cái gì đó như thế này:

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

Vì nó kết hợp nhiều ngắt dòng thành một ngắt đoạn duy nhất.

+0

'[#chr (10) #] +' là một cách dài để viết '\ n +' - nhưng bất kể điều đó, vì nó không xử lý trả về vận chuyển, điều này là kém hơn [câu trả lời hiện có được đưa ra bởi nosilleg ] (http://stackoverflow.com/questions/11330993/how-to-replace-crlf-with-br#11331321). –

Các vấn đề liên quan