Page 1 sur 1

ereg_replace et apostrophe

Posté : 04 déc. 2005, 17:30
par kek
Hello !

j'ai un petit bleme, que je n'ai pas trouvé en fouillant dans le forum..

Je veux faire un ereg_replace sur un mot qui contient une apostrophe genre :

Code : Tout sélectionner

$texte = ereg_replace("(c'est cool)", "Génial", $texte);
Mais le hic c'est que ça ne convertit pas le "c'est cool". J'ai essayé en mettant "c\'est cool", mais pareil, marche pô..

si qqun a une idée ?

thx !
kek

Posté : 04 déc. 2005, 17:34
par Cyrano
De la manière dont tu as écrit ton code, ça devrait remplacer "(c'est cool)" mais pas "c'est cool" : si les parenthèses ne sont pas trouvées, alors le test retourne false et ne remplace rien.

Posté : 04 déc. 2005, 17:40
par kek
ah oui désolé, c'est parce qu'en fait j'ai plusieurs mots à remplacer, mon code est du genre :

Code : Tout sélectionner

$texte = ereg_replace("(c'est cool|c'est super|l'éclate)", "Génial", $texte);
mais bon j'ai essayé pour 1 mot en virant les parenthèses et ça marchait pas non plus..

Posté : 04 déc. 2005, 17:49
par Cyrano
Essaye comme ça, chez moi, ça fonctionne:
<?php
$texte = "c'est cool le PHP et en programmant c'est l'éclate";
$masque = "(c'est cool|c'est super|l'éclate)";
$retour = ereg_replace($masque, "Génial", $texte);
echo("<p>". $retour ."</p>");
?>
J'obtiens en retour:
Génial le PHP et en programmant c'est Génial

Posté : 04 déc. 2005, 18:05
par kek
nope ça marche pas non plus..
si je copie colle ton code dans un fichier php ça fonctionne, mais en fait ma variable $texte provient d'un formulaire que l'utilisateur rempli. Envoyé par POST.

peut-être que les apostrophes sont codées différement du coup ?

Posté : 04 déc. 2005, 18:18
par Cyrano
Sans voir le code, je suis incapable de te répondre.

Posté : 04 déc. 2005, 18:23
par kek
Bin y a rien de compliqué dans le code en fait, je récupère une variable $texte d'un champ de texte textarea :
$texte = $_POST["texte"];
$masque = "(c'est cool|c'est super|l'éclate)";
$texte = ereg_replace($masque, "Génial", $texte);
$texte = ereg_replace("(\r\n|\n|\r)", "<br/>", $texte);

$sql  = "INSERT INTO $blogcomments values ('','$texte','$nom','$email','$url','$urlimg',$newdate_jour,$newdate_mois,$newdate_annee,'$newdate_heure','$ip','$host',$REF)";
$requete = @mysql_query($sql);

Posté : 04 déc. 2005, 18:37
par Cyrano
Essaye ça te raconte nous ce que ça donne :
<?php
$texte = $_POST["texte"];
echo("<p>Version originale : ". $texte ."</p>");
$masque = "(c'est cool|c'est super|l'éclate)";
$texte = ereg_replace($masque, "Génial", $texte);
echo("<p>Version corrigée : ". $texte ."</p>");
$texte = nl2br($texte);
echo("<p>Version avec retours de ligne : ". $texte ."</p>");

$sql  = "INSERT INTO $blogcomments values ('','". $texte ."', '". $nom ."', '". $email ."', '". $url ."', '". $urlimg ."', ". $newdate_jour .", ". $newdate_mois .", ". $newdate_annee .",'". $newdate_heure ."', '". $ip ."', '". $host ."', ". $REF .")";
$requete = mysql_query($sql);
?>

Posté : 04 déc. 2005, 18:48
par kek
Bon alors là avec ton code ça me sort ça :

Code : Tout sélectionner

Version originale : c\'est cool le php, trop de la balle c\'est super Version corrigée : c\'est cool le php, trop de la balle c\'est super Version avec retours de ligne : c\'est cool le php, trop de la balle c\'est super
Donc j'ai ajouté un
$texte = stripslashes($texte);
et ça marche nickel, puisque ça me routourne ça maintenant :

Code : Tout sélectionner

Version originale : c'est cool le php, trop de la balle c'est super Version corrigée : Génial le php, trop de la balle Génial Version avec retours de ligne : Génial le php, trop de la balle Génial
Mais par contre, si j'écris d'autres apostrophes dans le texte, genre "c'est la fête", il refuse de sauver mon message !

Donc j'ai fait une astuce à 2 balles qui fonctionne :
<?php
$texte = $_POST["texte"];
$texte = stripslashes($texte);
echo("<p>Version originale : ". $texte ."</p>");
$masque = "(c'est cool|c'est super|l'éclate)";
$texte = ereg_replace($masque, "Génial", $texte);
echo("<p>Version corrigée : ". $texte ."</p>");
$texte = nl2br($texte);
echo("<p>Version avec retours de ligne : ". $texte ."</p>");
$texte = addslashes($texte);

$sql  = "INSERT INTO $blogcomments values ('','". $texte ."', '". $nom ."', '". $email ."', '". $url ."', '". $urlimg ."', ". $newdate_jour .", ". $newdate_mois .", ". $newdate_annee .",'". $newdate_heure ."', '". $ip ."', '". $host ."', ". $REF .")";
$requete = mysql_query($sql);
?>

à savoir, mettre un stripslashes avant le ereg, et un addslashes après.. ça fonctionne :)
mais c'est ptet pas super correct

Posté : 04 déc. 2005, 18:50
par Cyrano
C'est tout à fait valable si.

Posté : 04 déc. 2005, 18:53
par kek
bon bin merci :)

j'ai mis résolu