Convertir guillemets simples en doubles

Résolu/Fermé
Abhi - 18 nov. 2008 à 23:05
Abhinophios Messages postés 3 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 novembre 2008 - 19 nov. 2008 à 01:07
Bonjour,

Voici mon problème :

Comment convertir une chaîne de caractères entre guillemets simples (pour laquelle les \r et \n ne sont pas interprétés) en chaîne entre guillemets doubles ?

Je veux simplement appliquer la fonction nbl2r à une chaîne stockée dans une BDD, et contenue dans une variable du type $message.

Or :

echo nb2lr("Ceci est un message. \r\n Et je viens de sauter une ligne");

fonctionne, mais pas :

$message = $tableau['message'];
echo nb2lr($message);

car

echo nb2lr('Ceci est un message. \r\n Et je viens de sauter une ligne');

ne fonctionne pas.

Bravo - et merci - à celui qui peut me tirer d'affaire (cela doit être très simple, je suppose, mais j'arrive pas à trouver).

8 réponses

Chupachups23 Messages postés 73 Date d'inscription jeudi 13 novembre 2008 Statut Membre Dernière intervention 9 décembre 2009 18
18 nov. 2008 à 23:19
https://www.php.net/manual/fr/function.nl2br.php

<?php
$message = "foo n'est pas\n bar";
echo nl2br($message);
?>
Chez moi ça marche...
0
Bien sûr, Chupa ! Chez moi aussi ça marche !

Mais je ne peux pas mettre ces guillemets doubles puisque je récupère le $message d'une base de données.
Du coup, comment je le "convertis" en guillemets doubles ?

J'ai essayé le truc débile et peu pro suivant :

$message = " " . $message . " ";

Mais évidemment ça marche pas.

Merci en tout cas !
0
Bonsoir

Mais je ne peux pas mettre ces guillemets doubles puisque je récupère le $message d'une base de données.
Si tu extrais tes données d'une base, elles sont directement dans une variable, pas entre guillemets simples ni entre guillemets doubles.
Si tu as un problème avec nl2br($variable) après avoir récupéré $variable d'une base de données, c'est que tu as mal enregistré ton texte dans ta base de données. Comment traites-tu tes données pour les enregistrer ?
0
Abhinophios Messages postés 3 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 novembre 2008
18 nov. 2008 à 23:41
Ah ! tu dois avoir raison, Toto.

Voici comment je fais :

Je mets un formulaire :


<form method="post" action="forum.php">
<p>
Message :
<textarea name="message" rows="8" cols="35"></textarea>
<input type="submit" value="Envoyer" />
</p>
</form>

Puis je récupère les données :

if (isset($_POST['message']))
{
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));

// Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br /> :

$message = nl2br($message);

// Après je fais un certain nombre de vérifications (message pas vide, pas de répétition, etc.)

// Puis j'enregistre DE CETTE FACON :

mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "', '" . time() . "')");

Et c'est ICI que j'aimerais faire :

echo nl2br($message);

Ou plus exactement :

mail('moi@moi.com', 'Objet', nb2lr($message));

Et ça ne marche pas.

Donc je me rends compte que la BDD n'a rien à voir là-dedans, c'est par la méthode POST que je récupère mon $message.

Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Grosses bêtises (malheureusement archicourantes...

$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
// Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br /> :
$message = nl2br($message);
Après je fais un certain nombre de vérifications (message pas vide, pas de répétition, etc.)  

1 - le mysql_real_escape_string ne devrait être fait que immédiatement avant d'enregistrer les données dans la base. Le résultat de cette fonction ne doit servir qu'à la requête mysql, pas à faire d'autres traitements comparaisons ou autres, car sinon ces traitements sont faits sur des messages modifiés.
2 - de même, le nl2br ne doit être appelé qu'au moment d'envoyer le texte à une page HTML (combiné avec htmlentities d'ailleurs) car il permet de transformer les sauts de ligne en "<br />" ce qui ne sert qu'au HTML, surtout pas à la base de données ni à l'envoi de mail (à moins que ton mail ait le mime type html).
Si tu convertis les sauts de ligne en "<br />" avant d'enregistrer dans ta base de données, c'est "<br />" qui est enregistré et tu ne peux faire la conversion dans l'autre sens. Si tu la fais, tu convertiras aussi les <br /> que l'utilisateur aurait écrit.
Le message que tu es en train de lire est un bon exemple : il ne mélange pas les <br /> que j'ai moi-même tapés en toutes lettres avec les sauts de ligne qui sont pourtant bien traduits en <br /> pour être affichés
0
Abhinophios Messages postés 3 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 00:17
Merci infiniment Toto !

Je vais essayer de corriger mes bêtises et je reviens.
0
En résumé :
if (isset($_POST['message']))
{
$message =$_POST['message'];
// il faut peut-être un stripslashes ici - dépend de la configuration du serveur

// Après je fais un certain nombre de vérifications (message pas vide, pas de répétition, etc.)
// Puis j'enregistre DE CETTE FACON :
mysql_query("INSERT INTO livreor VALUES('', '" . mysql_escape_string($pseudo) . "', '" . mysql_escape_string($message) . "', '" . time() . "')");
Et c'est ICI que j'aimerais faire :
echo nl2br(htmlentities($message));

Ou plus exactement :

mail('moi@moi.com', 'Objet', $message);                 // si mail en texte simple
mail('moi@moi.com', 'Objet',nl2br(htmlentities($message))); // si html

0
Abhinophios Messages postés 3 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 novembre 2008
19 nov. 2008 à 01:07
Merveilleux !

Tout fonctionne maintenant !

Un grand merci à toi, Toto !
0