Str_replace avec une variable ne marche pas

Fermé
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 - 2 août 2010 à 12:54
sob_12 Messages postés 306 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 7 février 2012 - 4 août 2010 à 16:00
Bonjour,
Je crois que mon code expliqe a peu près tout, donc, le voici:
if(isset($_POST['ancien_message']))
{
  $ancien_message = addslashes($_POST['ancien_message']); //on récupère l'ancien message dans $ancien_message
  $modif = array("é","à ","Ã'","â","î","è","ê"); //valeurs à rechercher
  $amodif = array("é","à","ô","â","î","è","ê"); //valeurs de remplacement aux valeurs à rechercher

//la variable $nouveau_message contient la chaine ou les remplacement ont été éfféctués.
  $nouveau_message = str_replace($modif,$amodif,$ancien_message);

  echo'<p><p>Voici le texte transformé, sans erreur d\'encodage... :) :</p> <textarea cols="120" rows="30">'.stripslashes($nouveau_message).'</textarea></p>';
//et on affiche le résultat désécurisé dans un textarea

}else{ //sinon, on affiche le forumulaire pour envoyer le texte à transformer
?>
<p>
<p>Entre ici le texte à transformer, afin de supprimer les erreurs d'encodage</p>
	<form action="transforme.php" method="post">
<textarea name="ancien_message" cols="120" rows="30"></textarea>
<input type="submit" value="transformer" />
	</form>
</p>
<?php
} //fin du else
?>


Là, ca ne transforme rien du tout, ca renvoi le résultat tel quel. Par contre, si je remplace cette ligne:
$nouveau_message = str_replace($modif,$amodif,$ancien_message);

Par cette ligne:
$nouveau_message = str_replace($modif,$amodif,"voici un caractère à transformer: é");

Il m'affichera
voici un caract?re ? transformer: é

C'est à dire: il effectue bien les transformations, mais mets des ? à la place des vrai caractères. :(
Aucune message d'erreur.

Mon problème est donc celui là: si la chaine dans laquelle on effectue des remplacements est contenu dans une variable, ca ne marche pas. :(
Pourquoi?



6 réponses

sob_12 Messages postés 306 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 7 février 2012 15
2 août 2010 à 13:08
Bonjour
PHP à des fonction déjà prévu pour décodé l'utf8 exemple : utf8_decode()
voir la doc de php : https://www.php.net/manual/fr/function.utf8-decode.php
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
Modifié par pols12 le 3/08/2010 à 11:04
Bonjour
Merci, ellesont l'air de marcher, presque:
Elle affiche:
le ê => ? =e accent circonflexe
é => ? = e accent aigu
è => ? = e accent grave
ç => ? = c cédille
? => ? = a accent grave /!\ espace apr?s le ?!

Je asis aps comment je vais faire pour le a accent grave. Une idée?
Pour les accent d'origine, je pense que je vais utilsier un str_replace. ;)
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
3 août 2010 à 11:12
Ca ne marche pas:
Si je mets ce code:
$modif = array("é","à","ô","â","î","è","ê");
$amodif = array("é","à","ô","â","î","è","ê");

$nouveau_message = utf8_decode(str_replace($modif,$amodif,$ancien_message));

ê devient ê =e accent circonflexe
é devient é = e accent aigu
è devient è = e accent grave
ç devient ç = c cédille
Jusque là ca va, mais:
à devient ? au lieu de à
é devient ?
è devient ?
î devient ?
etc
Donc, tous els bons accents d'origine deviennent des ? (plus exactement des carrés qui sont égal au caractère inconnu)

Une idée?
Merci
Pols12
0
sob_12 Messages postés 306 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 7 février 2012 15
3 août 2010 à 13:35
Tu l'encode en quoi ton texte ?
0

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

Posez votre question
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
4 août 2010 à 12:19
Salut
Sur un forum (dont je e suis pas le web), la balise meta content indique UTF8.
Mais il y a eu un bug, une mauvaise manip du web, et tous els accents des messages se sont transformés en à quelque chose. Le bug est réglé: tous les nouveaux accents sont corrects.
Mais les anciens reste à et il faut donc édietr chaque message pour les corriger.
J'ai eu l'idée de créer un script, car un cimple copier-coller serait très simple.
Voilà!
0
sob_12 Messages postés 306 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 7 février 2012 15
4 août 2010 à 16:00
D'accord.

Généralement ces erreur c'est parce que la page que tu visite crois avoir a faire a du iso alors que tu lui donne du utf8 ce qui donne ce bug tu peut essayé

https://www.php.net/manual/fr/function.htmlentities.php

et sa devrait l'affiché correctement vu que sa le transforme en iso
0