Choisir le bon encodage

Choisir le bon encodage - PHP - Programmation

Marsh Posté le 30-05-2011 à 17:29:50    

Bonjour à tous,
 
je viens vous pour que vous m'éclairiez à propos de l'encodage de mes pages PHP.  
J'utilise cette balise :
 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
 
mais j'ai un problème avec les accents alors j'utilise utf-8
 
et là j'ai un autre problème c'est que les apostrophes sont remplacés par \'
 
L'autre souci c'est que j'ai un script PHP qui doit enregistrer des infos dans une BDD, le problème est que si ma clé primaire (en l’occurrence le titre de l'info) contient un apostrophe l'info ne s'enregistre pas dans la BDD.
Est-ce que je dois changer dans PHPMyAdmin l'interclassement (latin1_swedish_ci).
 
Pouvez-vous m'aider et me donner une solution ?
 
Merci d'avance
 

Reply

Marsh Posté le 30-05-2011 à 17:29:50   

Reply

Marsh Posté le 31-05-2011 à 09:36:37    

up

Reply

Marsh Posté le 31-05-2011 à 11:34:52    

Quand on utilise SQL, il faut, en effet, remplacer les apostrophes simples dans les chaines de caractères par deux apostrophes qui se suivent. C'est la norme SQL.
 
On peut aussi remplacer l'apostrophe par autre chose que par deux apostrophes successives, mais alors, lors de la lecture, il faudra faire le remplacement inverse. Avec le remplacement par deux apostrophes, il n'est pas nécessaire de faire le remplacement inverse lors de la lecture.
 
Donc, personnellement, je me suis créé une fonction que j'appelle systématiquement pour remplacer les apostrophes simples, et aussi pour faire un peu de ménage, quand j'utilise une chaine de caractères dans une clause where ou dans un Insert.
 

// ====================================================================
// Conversion d'une chaine, remplacant une apostrophe par deux apostrophes
// in:  $s1 = " Aujourd'hui  "
// out: "Aujourd''hui"
// ====================================================================
function apo($s1)
{
  $s1 = trim($s1); // enleve les espaces autour
  $s1 = trim($s1, "\xA0" ); // enleve les nbsp
  $s1 = stripslashes($s1); // enleve les slashs avant les apostrophes, etc.
  $s1 = str_replace("'", "''", $s1); // remplace les guillemets
 
  // supprime les caractères non imprimables (null, tab, backspace, ...)
  $s2 = "";
  for ($i = 0; $i < strlen($s1); $i++) {
     $c = substr($s1, $i, 1);
     if (ord($c) >= 32)
        $s2 .= $c;
  }
  return($s2);
}
 
// ====================================================================
// ====================================================================
...
  dbq = "Insert into Ma_table(code_toto, libelle_toto)"
          ." values ('".$code_toto."', " '".apo($libelle_toto)."')";
...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed