Foros del Web » Programando para Internet » PHP »

Salto de linea nl2br

Estas en el tema de Salto de linea nl2br en el foro de PHP en Foros del Web. Buenas! Me han pasado este script de php para mandar el formulario de contacto a un mail: <?php // ******************* // BEGIN USER SETTINGS //******************** ...
  #1 (permalink)  
Antiguo 24/07/2012, 14:47
 
Fecha de Ingreso: julio-2012
Mensajes: 4
Antigüedad: 12 años, 3 meses
Puntos: 0
Salto de linea nl2br

Buenas! Me han pasado este script de php para mandar el formulario de contacto a un mail:

<?php

// *******************
// BEGIN USER SETTINGS
//********************

$sendTo = "[email protected]";
$subject = "web form message";
$greeting = "new web form message";

// *****************
// END USER SETTINGS
// *****************

$details = "";
$passed = true;

foreach($_POST as $nam => $val) {

// any field that is required has a "-required" at the end of
// the name attribute and goes through JavaScript validation
$nam = str_replace("-required", "", $nam);

// clean possible injections
$val = str_replace(array("\r", "\n", "%0a", "%0d"), '', stripslashes($val));

// look for possible injections and break out of loop if found
if(strpos($val, "MIME-Version") !== false || strpos($val, "Content-Type") !== false) {

$passed = false;
break;

}

// grab the name and email and build everything else into the email body
switch($nam) {

case "name":

// strip out any "@" symbols for possible injections
$fromName = str_replace("@", "AT", $val);

$details .= $nam . ": " . $fromName . "\n";

break;

case "email":

$emailFrom = $val;
$details .= $nam . ": " . $emailFrom . "\n";

break;

default:

$details .= $nam . ": " . str_replace("@", "AT", $val) . "\n";

}

}

// send the email
if($passed) {

$details = $greeting . "\n\n" . ($details);

$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/plain; charset=UTF-8\n";
$headers .= "From: " . $emailFrom . " <" . $fromName . ">\n";
$headers .= "Reply-To: " . $emailFrom . "\n";

mail($sendTo, $subject, $details, $headers);

}

// ***********
// END OF FILE
// ***********


El problema que tengo es que el mail no me reconoce los saltos de linea. Se que debo colocar un nl2br, pero no se donde, y consigo que me funcione!

Muchas gracias!
  #2 (permalink)  
Antiguo 24/07/2012, 14:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Salto de linea nl2br

1. Por favor, si no sabes usar la función nl2br() consulta el manual, ¿no te parece el mejor camino?
2. Dudo que aún así te funcione, pues la siguiente linea elimina los saltos de linea y por ende no funcionará nl2br()
Código PHP:
$val str_replace(array("\r""\n""%0a""%0d"), ''stripslashes($val)); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/07/2012, 15:12
 
Fecha de Ingreso: julio-2012
Mensajes: 4
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Salto de linea nl2br

Muchas gracias por responder! La verdad es que no soy ningun especialista en php. Al contrario! No tengo mucha experiencia con este lenguaje. Ya he consultado el manual de nl2br(). Otras veces la he usado sin problemas. Entonces, si dices que aqui no me va a funcionar, que puedo hacer para solucionar mi problema?
  #4 (permalink)  
Antiguo 24/07/2012, 15:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Salto de linea nl2br

Lo primero es comprender lo que sucede, no se trata sólo de decir "¿y como le hago?" y ya...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/07/2012, 15:32
 
Fecha de Ingreso: julio-2012
Mensajes: 4
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Salto de linea nl2br

Perdona, como ya te dije, me cuesta bastante el tema del PHP, por eso pido ayuda por aqui. Como me indicaste, el problema es que en esta linea:

$val = str_replace(array("\r", "\n", "%0a", "%0d"), '', stripslashes($val));

le decimos que elimine los saltos de linea. Si la modifico asi:

$val = nl2br(str_replace(array("\r", "%0a", "%0d"), '', stripslashes($val)));

me hace los saltos, pero me aparece el <br> en el html del mail.
  #6 (permalink)  
Antiguo 24/07/2012, 15:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Salto de linea nl2br

Bingo!

Ahora, eso no es todo lo que falta, debes también especificar que tu correo es HTML.

En la siguiente linea lo especificas como text/plain cuando debería ser text/html
Código PHP:
$headers .= "Content-type: text/plain; charset=UTF-8\n"
PDTA: nunca dudes en mirar el manual, eso lo habrías notado revisando acerca de mail() en el manual...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 24/07/2012, 16:27
 
Fecha de Ingreso: julio-2012
Mensajes: 4
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Salto de linea nl2br

Tema solucionado! Muchas gracias Pateketrueke! Me has sido de gran ayuda! La proxima vez prometo estudiar mejor el manual! Debo aprender a manejarme mejor en PHP!

Saludos!

Etiquetas: formulario, nl2br, salto+de+linea
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:21.