Bonjour

Problème d'encodage ou de méthode ?
Pour mon projet de CMSbot j'ai un formulaire à envoyer au serveur de bot (sur lequel donc je n'ai aucun droit ni accès). Parce qu'il est paramétré pour et par des anglophones il ne comprend pas les accents.... Pour ne pas demander à l'utilisateur d'écrire sans accents j'essaie de tester un système où le contenu d'un input renseigné avec accents est récupéré, traité en JS et réinjecté à l'intérieur d'un autre input en hidden. L'idée c'est d'envoyer deux valeurs dont une avec et l'autre sans.


<form id="formAdmID" action="url" method="post" onsubmit="return Noaccent()">
<input type="hidden" name="input" id="inputID" />
<input type="text" name="message" id="messageID" />
...


Le document de destination est en utf-8.


<script type="text/javascript">
//<![CDATA[
function Noaccent(){
   newinput = document.forms['formAdmID'].elements['messageID'].value;
	newinput = newinput.replace(/[éèêë]/gi, "e");
        ...
	document.forms['formAdmID'].elements['inputID'].value=newinput;
    alert(document.forms['formAdmID'].elements['inputID'].value);
    return true;
  }
//]]>
</script>


Apparemment ça ne marche pas. Quand je passe document.forms['formAdmID'].elements['inputID'] en type="text" pour voir le contenu les accents sont toujours là Smiley bawling et alert me les retourne
Salut Arsene,

à priori un effet de bord avec le reste du code car chez moi cela fonctionne avec :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test formulaire</title>
<script type="text/javascript">
//<![CDATA[
function Noaccent(){
	newinput = document.forms['formAdmID'].elements['messageID'].value;
	newinput = newinput.replace(/[éèêë]/gi, "e");
	newinput = newinput.replace(/[àâä]/gi, "a");
	newinput = newinput.replace(/[ïî]/gi, "i");
	newinput = newinput.replace(/[üûù]/gi, "u");
	newinput = newinput.replace(/[öô]/gi, "o");
	document.forms['formAdmID'].elements['inputID'].value=newinput;
	alert(document.forms['formAdmID'].elements['inputID'].value);
	return true;
}
//]]>
</script>
</head>
<body>
<?php
$message = !empty($_POST['message']) ? trim($_POST['message']) : 'éazepïùàéûèô';
if (!empty($_POST)) { 
	echo '<pre>';
	print_r($_POST);
	echo '</pre>';
}
?>
<form id="formAdmID" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" onsubmit="return Noaccent()">
	<p>
		<input type="hidden" name="input" id="inputID" />
		<label for="messageID">message : </label>
		<input type="text" name="message" id="messageID" value="<?php echo htmlspecialchars($message); ?>" />
	</p>
	<p>
		<input type="submit" value="Envoyer" />
	</p>
</form>
</body>
</html>
Et sinon : pourquoi ne pas faire ça en PHP ?
Merci Heyoan, je regarde ça de suite.

Pas en PHP pour une raison assez compliquée (enfin pour moi....)

En fait chaque formulaire ramène sur la même page (index.php) comme destination et remplit deux fonctions. La première est d'envoyer une valeur "input" au serveur de bot, valeur qui forme un fichier XML que j'interroge à distance par une suite d'instructions curl. La deuxième fonction est de paramétrer l'affichage de ma page index.php selon le type d'input qui est sorti.
Gérer la question en PHP (enfin c'est comme ça que je voyais les choses avant de me rabattre sur JS) voudrait dire que je passe par une page intermédiaire qui retraite en regex la val d'input pour la router ensuite à la fois sur le serv bot et revenir avec les autres var sur index.php... Un peu lourd je trouve.
A moins que la solution idéale m'ait échappé, ce qui n'est pas rare le vendredi a-m Smiley smile
Non ça passe pas, ni ton script ni le mien. Les retours sont toujours accentués. Je penche plutôt pour un prob d'encodage... d'ailleurs la preuve c'est que ton input de test m'affiche "??azep????????"
La page index.php est en utf-8 + header utf-8 mais bon, faudrait pousser les tests plus loin.
Arsene a écrit :

Non ça passe pas, ni ton script ni le mien. Les retours sont toujours accentués. Je penche plutôt pour un prob d'encodage... d'ailleurs la preuve c'est que ton input de test m'affiche "??azep????????"
La page index.php est en utf-8 + header utf-8 mais bon, faudrait pousser les tests plus loin.
Ta page est bien encodée en utf-8 ?
J'en suis là Smiley smile Elle est déclarée en utf-8, reconnue comme utf-8 par web-sniffer, crée sous DW en utf-8... mais est-elle en utf-8 ? bonne question.
Ah ben ça j'aurais jamais cru ! En fait c'est mon nouveau client FTP qui avait une case bien cachée tout au fond des Prefs qui encode par défaut les caractères ISO. Ne voyant aucune autre solution que le moment du transfert je me suis dit que c'est par là que ça devait se jouer. 5 h de perdues Smiley fache
Bon w-e tout le monde

(A part ça Heyoan quelle solution PHP sans passer par une page intermédiaire : poster (et donc recharger), transcoder sans accents par une regex et réenvoyer en tâche de fond me créerait une rupture dans la cohérence d'affichage des infos qui selon leurs provenance (mon serveur ou le serveur de bot) ne seraient plus synchronisées ?)
Modifié par Arsene (13 Feb 2009 - 17:03)
Arsene a écrit :

(A part ça Heyoan quelle solution PHP sans passer par une page intermédiaire : poster (et donc recharger), transcoder sans accents par une regex et réenvoyer en tâche de fond me créerait une rupture dans la cohérence d'affichage des infos qui selon leurs provenance (mon serveur ou le serveur de bot) ne seraient plus synchronisées ?)
C'est effectivement ce que j'avais en tête mais vu le contexte je suis d'accord avec toi pour trouver ça un peu lourd. Smiley murf
a écrit :
Arsene a écrit:

Ah ben ça j'aurais jamais cru ! En fait c'est mon nouveau client FTP qui avait une case bien cachée tout au fond des Prefs qui encode par défaut les caractères ISO.


Quel étais ton client FTP Arsene qui te causait se problème???
Ca m'intrigue Smiley biggrin