Pregunta

Estoy tratando de almacenar HTML registró a partir de un área de texto en una base de datos. Tengo un área de texto dentro de un formulario que he llamado "mensaje". El código PHP que los procesos es:

if(isset($_POST['submit'])){
    if(isset($_POST['title']) && isset($_POST['message'])){
        $title = $_POST['title'];
        $message = $_POST['message'];

        if(get_magic_quotes_gpc()){         
            $title = stripslashes($title);
            $message = stripslashes($message);
        }

        $title = mysql_real_escape_string($title);
        $message = mysql_real_escape_string($message);

        $q = "INSERT INTO table (title,datetime,text) VALUES ('{$title}',NOW(),'{$message}')";
        $rows_affected = $db->exec($q);
        if($rows_affected > 0){
            echo "<p>Done.</p>";
        } else {
            echo "<p>Failed. </p>"; 
        }
    }
}

El problema que estoy teniendo es entonces recuperando esto y convertir los saltos de línea a <br />. Esto es lo que estoy haciendo:

$res = array();

$order = array("\r\n","\n","\r");
$replace = '<br />';

$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
    foreach($res as $result){
        $result['title'] = stripslashes($result['title']);
        $result['text'] = str_replace($order, $replace, stripslashes($result['text']));
    }       
}

echo "<pre>";
print_r($res);
echo "</pre>";

Yo simplemente no puede deshacerse de esos molestos \r\n de en el mensaje. He intentado cambiar $order a

$order = array("\\r\\n","\\n","\\r");
// and even
$order = array("\\\r\\\n","\\\n","\\\r");

pero nada parece funcionar. Algunas ideas?

¿Fue útil?

Solución

if ($res = $db->get_all('SELECT title,datetime,text FROM table')){
    foreach ($res as &$result){
        $result['text'] = nl2br($result['text']);
    }       
}

echo "<pre>";
print_r($res);
echo "</pre>";

Lo hice tres cosas:

  • Eliminar el stripslashes. Ellos no deben estar allí. El mysql_real_escape_string barras añade se eliminan cuando se ejecuta la consulta.
  • I utilizó el nl2br función de las nuevas líneas. ¿Por qué escribir algo por sí mismo si ya está construido en?
  • I añadió una & delante de $result en el bucle foreach. Si no lo hice esto sólo se modificaron las copias de poca profundidad, no las variables mismas. Por lo tanto, no habría ningún cambio en absoluto.

Otros consejos

Para la recuperación de los datos que no es necesario atornillar alrededor con str_replace / stripslashes.

$res = array();

$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
    foreach($res as &$result){
        $result['title'] = $result['title']; // Don't see the reason for stripslashes here
        $result['text'] = nl2br($result['text']);
    }       
}

echo "<pre>";
print_r($res);
echo "</pre>";

Uso nl2br para convertir su \ n descansos adecuados a la línea de HTML. (Nota: Si desea mostrar el texto del interior de un área de texto de nuevo, por ejemplo, para la edición, lo que necesita para dar salida al "texto" tal cual). La única cosa que usted quiere hacer es el uso strip_tags para evitar HTML sea insertado en su salida.

forma más habitual de lo que lo hizo Nikic

foreach ($data as $key => $row){
  $data[$key]['text'] = nl2br($row['text']);
}

¿verdad sobrescribir la variable $ resultado temporal, mientras que usted tiene que escribir de nuevo la variable modificada en una matriz. y dar a nuestras variables nombres sensibles.
Además, considere usar htmlspecialchars () si se trata de texto suministrado por el usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top