2012-07-04 11 views
9

Por ejemplo:Cómo reemplazar CR + LF con <br />?

un usuario envía un formulario con un <textarea name="mytext" cols="35" rows="2"></textarea> y prensas ENTER dentro de ella. ¿Cómo reemplazaría el CR-LF con un <br />?

Respuesta

16

CF tiene una función para esta llamada ParagraphFormat():

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

A partir de los documentos de ayuda -

Reemplaza caracteres de una cadena:

  • caracteres de nueva línea individuales (CR/LF secuencias) con espacios
  • Caracteres dobles de nueva línea con etiquetas de párrafo HTML (<p>)

Se puede hacer más de lo que quiere en la que también busca dobles saltos de línea y añade <p> y </p> etiquetas.

Ben también tiene una versión mejorada (una UDF) llamada párrafo2 que sería fácil de modificar para obtener el efecto exacto que desee. Aquí está el enlace:

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

+5

Creo que ParagraphFormat2 puede ser mejor en este caso, ya que convierte los saltos de una sola línea en "
" (así como los saltos de doble línea en los párrafos HTML). –

2

En lugar de reemplazarla con br Me gustaría utilizar la función ParagraphFormat cuando se muestran los valores.

10

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

No debe golpear \n\r de forma natural, pero puede suceder si está siendo insertado por un desarrollador que ha olvidado el orden correcto.

Ese es un subconjunto de una función más general para reemplazar los caracteres fin de línea (EOL) con otra cosa basada en lo que está haciendo (por ejemplo, tener que escribir en formato Windows/Linux, archivos .ics, html, cfheaders , etc)

<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

Acabo de arreglar su primer ejemplo y simplifiqué el código, pero me di cuenta de que esto no funcionaría según lo previsto: el individuo '\ r' y' \ n' se emparejaron antes de las versiones combinadas (el primer partido gana en la mayoría de las expresiones modernas), tan necesario moverlos al final de la alternancia - .e.'\ r \ n | \ n \ r | \ n | \ r' - Seguí adelante y solucioné eso también, pero solo quería señalarlo, ya que es útil tenerlo en cuenta. –

+1

Aunque personalmente, siempre elimino todos los retornos de carro y solo tengo que ocuparme de las líneas nuevas, p. 'String.replaceAll ('\ r', ''). ReplaceAll ('\ n', '
')' –

+0

Tienes razón. Gracias por la edición. – nosilleg

2

puede utilizar la función paragraphFormat() pero a veces un reemplazar la función le ayuda a visualizar lo que está sucediendo realmente.

Un ejemplo: <cfset TheText=replace("#form.myText#",chr(13)&chr(10),"<br />","all")>

Esto reemplaza todos los transportes de línea de retorno se alimenta con un salto de línea html

0

realidad, yo prefiero algo como esto:

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

ya que combina varias líneas se rompe en un salto de párrafo único.

+0

'[#chr (10) #] +' es una forma larga de escribir '\ n +' - pero independientemente de eso, dado que no maneja retornos de carro, esto es inferior a la [respuesta existente dada por nosilleg ] (http://stackoverflow.com/questions/11330993/how-to-replace-crlf-with-br#11331321). –

Cuestiones relacionadas