Htmlentities problème avec œ

Fermé
Mic - Modifié le 28 mai 2017 à 14:35
 Mic - 30 mai 2017 à 22:24
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
28 mai 2017 à 17:41
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
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
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
Modifié le 30 mai 2017 à 14:06
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
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
30 mai 2017 à 21:52
Ç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
Ah OK, je n'avais pas vu cela. Merci encore
0
Mais c'est iso8859-15 ou iso-8859-15 (avec le tiret) ?
0
Utilisateur anonyme
30 mai 2017 à 22:18
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
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