Str_replace avec une variable ne marche pas

pols12 Messages postés 1143 Date d'inscription   Statut Membre Dernière intervention   -  
sob_12 Messages postés 338 Statut Membre -
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?



--
☼◄►►►↑↑■■■■==##-->···→{([/ Pols12 \])}←···<--##==■■■■↓↓◄◄◄►☼

6 réponses

  1. pols12 Messages postés 1143 Date d'inscription   Statut Membre Dernière intervention   120
     
    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
  2. pols12 Messages postés 1143 Date d'inscription   Statut Membre Dernière intervention   120
     
    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
  3. sob_12 Messages postés 338 Statut Membre 15
     
    Tu l'encode en quoi ton texte ?
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. pols12 Messages postés 1143 Date d'inscription   Statut Membre Dernière intervention   120
     
    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
  6. sob_12 Messages postés 338 Statut Membre 15
     
    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