Remplacer des caractères par d'autres, en javascript

Mammouth du PHP | 959 Messages

30 avr. 2007, 13:27

A.... sa marche mais il y a un tout petit problème !
le script me fais foirer les caractères spéciaux en code comme cela :

Code : Tout sélectionner

©   ´ etc
:cry:
il les remplace genre comme cela :

Code : Tout sélectionner

¼Ã£ï¿½ï¿½Ã£ï¿½Â¼

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2007, 13:55

....
Exemple:

Code : Tout sélectionner

var chaine = 1; var chaine = 2; alert(chaine);
Question: que va afficher alert() 1 ou 2 :wink:
Question: que va afficher alert() 1 ou 2 :
eum.... je pence que c'est sois :
- aucun
- les 2
Mais non, c'est la dernière valeur de chaine avant alert() qui sera affichée (2)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 959 Messages

30 avr. 2007, 14:32

a ok.... j'ai pas testé sa, j'ai jouer le jeu... lol

une solus pour le ¼Ã£ï¿½ï¿½Ã£ï¿½Â¼ ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2007, 14:45

fais voir le code et le jeu d'essai
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 959 Messages

30 avr. 2007, 14:53

je te le dit, sais du php
<script language="javascript" type="text/javascript">
function change() {
    var chaine = document.getElementById('title').value;
    var chaine2 = document.getElementById('copyright').value;
    chaine=chaine.replace("'", "&acute;");
    chaine2=chaine2.replace("'", "&acute;");
    document.getElementById('title').value=chaine;
    document.getElementById('copyright').value=chaine2;
 // alert('Résultat= ' + chaine);
}
</script>
<?php
require('../base.php');
require('functions.php');

// Initialisation de la variable.
empty($_POST['modifier']) ? $modifier = '' : $modifier = $_POST['modifier'];

if ($modifier == 'oui')
{

// On enregistre les donnes
$fichier = fopen('../base.php', 'w+'); // w+ comme a si le fichier n'existe pas, il est cr  la vole et cela ne provoque pas d'erreur.
fwrite($fichier, "<?php\n");
fwrite($fichier, "\$title='".nettoie($_POST['title'])."';\n");
fwrite($fichier, "\$copyright='".nettoie($_POST['copyright'])."';\n");
fwrite($fichier, "?>\n");
fclose($fichier);

echo '<div align="center">Donn&eacute;es modifi&eacute;es.<br><a href="index.php" title="Retour aux param&eacute;tages">Retour aux param&eacute;tages</a></div>';
}


// Mettre les 2 fonctions : "nettoie" (plus haut) et "nettoie_reception" dans un fichier extrieur qui ensuite sera includ
function nettoie_reception($chaine)
{
$chaine = str_replace(chr(172), '\'', $chaine);
$chaine = str_replace(chr(184), '\\', $chaine);
$chaine = trim($chaine);

return $chaine;
}


// Affichage du formulaire en arrivant sur la page.
if ($modifier != 'oui')
{
echo '
<div align="center"><center><b>Configuration de certains Textes du Site</b></center></div><br />
<div align="center">
<form action="index.php" method="post" style="margin: 0px;">
<input type="hidden" name="modifier" value="oui">

<table width="90%" border="1" cellspacing="0" cellpadding="3" bordercolor="#000000">  
  <tr>
  <td colspan="2" align="center"><span style="color:#FF0000"><b>/!\ ATTENTION /!\</b></span> pour les apostrophes, mettre <b>&acute;</b> &agrave; la place !</td>
  </tr>
  <tr>
        <td>Titre de la page d\'Accueil</td>
        <td><input name="title" id="title" type="text" value=\''.nettoie_reception($title).'\' onChange="change()" size="90"></td>
  </tr>
   
  <tr>
        <td>Copyright de la page d\'accueil (Pied de page)</td>
        <td><input name="copyright" id="copyright" type="text" value=\''.nettoie_reception($copyright).'\' onChange="change()" size="90"></td>
  </tr>

  <tr>
    <td colspan="2" align="center"><input name="submit" type="submit" value="Modifier"></td>
  </tr>


</table>

</form>
</div>
';
}
?>
functions.php
<?php

function nettoie($chaine)
{
$chaine = htmlentities($chaine);

if (!get_magic_quotes_gpc())
   {
   $chaine = str_replace('\'', chr(172), $chaine);
   $chaine = str_replace('\\',chr(184) , $chaine);
   }
       else
           {
           $chaine = str_replace('\\\'', chr(172), $chaine);
           $chaine = str_replace('\\\\',chr(184) , $chaine);
           $chaine = str_replace('"', '"', $chaine); 
           $chaine = str_replace('<', '<', $chaine);
           $chaine = str_replace('>', '>', $chaine);
           $chaine = str_replace('&', '&', $chaine);
           }

$chaine = stripslashes($chaine);
$chaine = trim($chaine);
//$chaine = ereg_replace('[ ]{2,}', ' ', $chaine);
return $chaine;
}
?> 
base.php
<?php
//  TITLE INDEX
$title='My Title ス ア ン コーヒー';

// COPYRIGHT
$copyright='Copyright &copy; 2007';
?>
ceci :
ス ア ン コーヒー
est du japonais (=)
ス ア ン コーヒー

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2007, 16:50

J'ai testé et ça marche, je n'ai pas de caractères bizarres, le fameux &acutes; est bien enregistré dans base.php et bien rappelé dans la zone en tant que '

Mais j'ai remarqué que tu utilises un lien de retour à la page index qui peut ne pas raffraichir cette dernière, il vaudrait mieux faire un chargement via javascript :

Code : Tout sélectionner

<a href="javascript:window.location.replace(\'index.php\');" title="Retour aux param&eacute;tages">Retour aux param&eacute;tages</a>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 959 Messages

30 avr. 2007, 17:07

A ! , j'ai fais un petit test :je me demander si s'était pas l'hébergeur :
il est sur free le truc : sa marche pas, sa fais les caractères bizaroïdes

et maintenent, j'ai essayé sur mon serveur http, sa marche comme sa doit marcher....

Sadeq, tu a essayé sur quel hébergeur ?

et comment je fait alors, puisque le site doit être sur free ? il doit y avoir un problème de compatibilité....

Sadeq, si tu a l'ocasion d'essayé sur Free, cherche stp, moi, je conné malheureusement rien en javascript

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2007, 19:12

J'ai fait le test en local :roll: je ne peux le faire sous free malheureusement ni sous d'autres d'ailleurs.
L'appel est donc ouvert aux autres bienveillants :lol:

Ceci dit, je te suggére de remplacer le code d'écriture dans le fichier par le suivant:

Code : Tout sélectionner

// On enregistre les donnes $base = "<?php \n \$title='".nettoie($_POST['title'])."'; \n \$copyright='".nettoie($_POST['copyright'])."'; \n ?> \n"; file_put_contents ('../base.php', $base);
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 959 Messages

30 avr. 2007, 21:31

A ! j'ai trouver, il fallait simplement rajouter

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
à l'entète du code !

Bon, ce sujet est alors maintenent résolu...

Merci encore ! :D :D