Htmlentities problème avec œ

Mic -  
 Mic -
Salut ! En utilisant :
$Ville=htmlentities($_POST["Ville"], ENT_QUOTES,"ISO-8859-15");

Les é sont bien convertis en é mais oe collé restent inchangé. Pourquoi ?
Merci.
A voir également:

4 réponses

Utilisateur anonyme
 
Bonjour

J'ai fait l'essai chez moi et bien sûr ça a l'air de marcher.

Ta donnée $_POST["Ville"] est-elle réellement encodée en ISO-8859-15 ?
Comment t'en assures-tu ?
Et quand tu dis que les œ sont inchangés, comment fais-tu pour le vérifier ?

J'ai besoin des trois réponses aux trois questions pour pouvoir avancer.
0
Mic
 
Salut !
Le charset de la page est UTF-8 mais le résultat est le même avec le charset ISO-8859-15.

Pour vérifier cela die($Ville); et je vérifie le code source de la page. Les é deviennent é et les oe collés est un S bizarre ou restent inchangés selon les tests que j'ai fait.
Merci
0
Mic
 
Toutefois, je ne suis pas le seul :
http://www.oscommerce-fr.info/forum/index.php?showtopic=69187

Sa fonction marche super bien. Pour l'instant le problème n'est pas résolu mais contourné.
Pour le signe de l'euro, c'est pareil. htmlentities ne le converti pas même avec l'ISO-8859-15.
Merci
Aussi, c'est le fait de passer d'une page à l'autre via un formulaire, les entités encodés œ ou é redeviennent des é ou des oe collés. c'est pour les enregistrer dans la base de données que je les convertis avec htmlentities.
0
Utilisateur anonyme
 
Bonjour

Je doute fort que le résultat soit le même selon que le charset de la page soit UTF-8 ou ISO-8859-15, car le code correspondant à l'œ est différent dans les deux cas, il n'y a aucune raison que htmlentities donne le même résultat.
Tout ce que tu me décris est très étonnant, htmlentities convertissant parfaitement chez moi aussi bien les œ en œ et les euros en € - à condition toutefois de ne pas mélanger les divers encodages.
Cela vient peut-être de ta version de PHP, avec quelle version travailles-tu ?
Quant au lien que tu donnes vers un autre forum, il s'agit d'un autre problème. Il ne parle absolument pas de la fonction htmlentities. Et le résultat de sa fonction dépend de l'encodage de la page.

Par ailleurs, utiliser htmlentities pour enregistrer dans une base de données me semble une très mauvaise idée. Ça altère les données enregistrées, ce qui rend impossible certaines opérations comme le tri. htmlentities n'est prévue que pour l'affichage dans une page HTML et ne devrait pas être utilisée pour autre chose.

Je te propose d'essayer le petit bout de code suivant et que tu me dises ce qu'il affiche quand tu saisis un œ dans le formulaire et que tu envoies ce formulaire.

<!DOCTYPE HTML>
<html lang="fr">
  <head>
  <meta charset="iso8859-15">
  <title>essai</title>
  </head>
  <body>

<form method="post" action="">
<input type="text" name="Ville" />
<input type="submit" value = "envoyer">
</form>

<?php
if (isset($_POST['Ville'])) {
  echo '<br>';
  echo htmlspecialchars(htmlentities($_POST["Ville"], ENT_QUOTES,"iso8859-15"));
  echo '<br>';

  for ( $k=0; $k<strlen($_POST["Ville"]);$k++) {
    echo sprintf("%02X ",ord($_POST["Ville"][$k]));
  }
}
?>
  </body>
</html>
0
Mic
 
Merci Mon père ! :) En fait, c'est dans la ligne de la méta que ça marchait pas.
Voici ce que j'ai toujours mis :
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=text/html; charset=UTF-8" />

En remplaçant UTF-8 par l'ISO-8859-15 cela donnait des résultats bizarres, parfois même la virgule était encodée.
J'ai mis comme toi :
<META CHARSET="ISO-8859-15" />
Et ça marche du tonnerre. Merci encore.
0
Utilisateur anonyme
 
Ça aurait pu marcher…
sauf que dans ta ligne, il y a deux charset ! Avec un seul charset :
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso8859-15" />

ça marche bien.
0
Mic
 
Ah OK, je n'avais pas vu cela. Merci encore
0
Mic
 
Mais c'est iso8859-15 ou iso-8859-15 (avec le tiret) ?
0
Utilisateur anonyme
 
Oui tu as raison, il y a un tiret. J'ai fait une faute de frappe dans ma page de test, et je l'ai copiée-collée dans mon message : ça marche avec cette faute.
Note que plusieurs orthographes sont officiellement admises (mais pas la mienne) :
https://www.iana.org/assignments/character-sets/character-sets.xhtml
0
Mic
 
OK merci mais la manière dont tu l'as écrite est en HTML5. L'autre :
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso8859-15" />
c'était du HTML4. Donc j'ai utilisé celle du HTML5 comme dans ta page c'est mieux. A bientôt.
0