Bonjour à tous, j'ai quelques problèmes avec un formulaire qui envoie les données en ajax et les caractères spéciaux.

Mon javascript:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<SCRIPT language="Javascript">
function MaFonctionAjax(Filtertype,Filtertype2,Filtertarget,Filtervaluetype,Filtervalue,input3,input4,Filterwhat,Filtername)
{
 
 
var OAjax;
  if (window.XMLHttpRequest) OAjax = new XMLHttpRequest();
  else if (window.ActiveXObject) OAjax = new ActiveXObject('Microsoft.XMLHTTP');
  OAjax.open('POST',"table.php",true);
  OAjax.onreadystatechange = function()
  {
      if (OAjax.readyState == 4 && OAjax.status==200)
      {
          if (document.getElementById)
          {
              if (OAjax.responseText =='true') { /* OK */
                    document.getElementById('table').innerHTML='<font color=GREEN>'+OAjax.responseText+'</font>';
              }else{                             /* PAS OK */
                    document.getElementById('table').innerHTML='<font color=RED>'+OAjax.responseText+'</font>';
              }
          }
      }
  }
  OAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  OAjax.send('Filtertype='+Filtertype+'&Filtertype2='+Filtertype2+'&Filtertarget='+Filtertarget+'&Filtervaluetype='+Filtervaluetype+'&Filtervalue='+Filtervalue+'&input3='+input3+'&input4='+input4+'&Filterwhat='+Filterwhat+'&Filtername='+Filtername);
 
  }
</script>
Le formulaire qui est dans un tableau:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<form name="formulaire" method="post" onsubmit="maFonctionAjax(this.Filtertype.value,this.Filtertype2.value,this.Filtertarget.value,this.Filtervaluetype.value,this.Filtervalue.value,this.input3.value,this.input4.value,this.Filterwhat.value,this.Filtername.value);return false" action="">
<tr>
<td>Type</td>
 
...blablabla....
 
<td>Group Name</td><td><select name="Filtername" id="Filtername" class="select">
<?php
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('globals',$db);
 
mysql_query("SET NAMES UTF8"); 
 
$sql2="select distinct `Name` from `globals` order by `Name`";
$req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($row2 = mysql_fetch_array($req2)){
//	$row3=addslashes($row2[Name]);
	$row3=htmlentities($row2[Name],ENT_COMPAT,'UTF-8');
	$row3=mysql_real_escape_string($row3);
 
	$regime = "\"";
	$bonne_chere   = "&quot;";
 
	$row3 = str_replace($regime, $bonne_chere, $row3);
 
	echo "<option value=\"$row3\" >$row2[Name] - $row3</option>";
}
 
mysql_close($db);
?>
</select></td>
 
...blablabla...
 
<input type="submit" name="submit" value="Filter"></input></td></tr>
</form>
Comme vous pouvez le voir, je fais une liste avec des valeurs venant d'une base de données mysql. Les infos dans cette liste sont très variables, voici quelques exemples qu'il peut y avoir:
xy' zzz bbb
d dzd aze
Team "blablabl"
Team "bla'bla'
Team "f'r't'p"
Team "ezae"eaeae"
Team "okpo'd"ddd"
Team "dadai & oijoij"
Team "dadada+defzf"

.......etc

Je récupère ensuite ces infos grâce à un $_POST. Le problème est que, si par exemple il y a un & dans la liste, le & ainsi que tout ce qui est après ne passe pas (je pense que ça bloque au niveau du javascript, car la valeur dans $_POST reçue n'est pas la bonne (par exemple, si dans la liste j'ai Team "aa&bb", je ne reçois que Team "aa). Ensuite, si il y a un +, le + est remplaçé par un espace. Ensuite, si il y a un < ou un >, cela bug aussi. Si il y a un ", cela ne pose pas de problème, grâce au preg_replace que j'ai mis.

Quelqu'un aurait une idée de comment je pourrai faire pour corriger tout ceci? J'ai essayé en faisant un preg_replace avec plusieurs variables à changer (& en &xxx (le code html))...etc) mais cela me fait une fonction qui met longtemps à tourner (ou qui bug, j'ai préféré arrêté avant)).