8768 sujets

Développement web côté serveur, CMS

Bonjour,
J'utilise actuellement preg_replace avec php pour supprimer les accents dans un formulaire.

$msg = htmlentities("$message");
$msg0 = preg_replace('#&(.)(acute|cedil|circ|ring|tilde|uml|grave);#', '$1', $msg);

Et j'aimerais restreindre la fonction à certains caractères spéciaux seulement comme le ç => c et le ô => o.
J'ai testé plusieurs solutions sans résultats.

Merci encore de votre aide Smiley cligne
Modifié par vinux (27 Jun 2007 - 15:02)
utilise plutot strtr() .

exemple


$msg0 = strtr($msg,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàâãäåçèéêëìíîï©£òóôõöùúûü~ÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaceeeeiiiioooooouuuuyyy');
Bonjour,
Je viens de tester
$msg = htmlentities("$message");
$msg0 = strtr($msg,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàâãäåçèéêëìíîï©£òóôõöùúûü~ÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaceeeeiiiioooooouuuuyyy');

Mais j'ai toujours les caractères accentués, d'où peut venir le problème ?
Idem avec
$msg = strtr($message,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàâãäåçèéêëìíîï©£òóôõöùúûü~ÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaceeeeiiiioooooouuuuyyy');


Merci de votre aide
Modifié par vinux (27 Jun 2007 - 13:44)
Salut vinux Smiley cligne ,

le fait d'utiliser htmlentities juste avant le strtr transforme toutes les lettres accentuées (par exemple é devient é) et donc le strtr ne trouve rien à remplacer : donc enlèves-le Smiley smile .

A+
cela marche pourtant très bien je l'ai déjà utilisé !
es-tu sûr d'afficher la bonne variable qui résulte de la fonction strtr ?

dans son deuxième exemple c'est bizarre que ça ne marche car a priori $message n'a pas été traité avec htmlentities .. si on se fie au code précédent
Modifié par rafale29 (27 Jun 2007 - 14:09)
rafale29 a écrit :
dans son deuxième exemple c'est bizarre que ça ne marche car a priori $message n'a pas été traité avec htmlentities .. si on se fie au code précédent
Ah oui, tu as raison : j'avais pas vu la 2ème partie Smiley rolleyes

Donc soit $message a déjà été modifié, soit comme tu le dis ce n'est pas la bonne variable qui est réaffichée Smiley langue
Merci de vos réponses Smiley cligne
Voici mon code un peu plus complet, j'espère que vous y verrez un peu plus clair Smiley cligne
	// On récupère le message envoyé par le formulaire
	// par la même occasion, on supprimer les slashs
	$message .= "nom :\n".stripslashes($_GET['name'])."\n";
	$message .= "email :\n".stripslashes($_GET['email'])."\n";
	$message .= stripslashes($_GET['comment'])."\n";

	// on modifie les caractères accentués
	$msg = strtr($message,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàâãäåçèéêëìíîï©£òóôõöùúûü~ÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaceeeeiiiioooooouuuuyyy');

	//On affiche le message
echo $msg;

Je ne sais pas si ca peut éclaircir le problème mais j'utilise un formulaire codé en Ajax. (voir un exmple sur http://www.webrankinfo.com/forums/viewtopic_64319.htm )
Modifié par vinux (27 Jun 2007 - 14:29)
Re',

En utilisant le code que tu donnes mes caractères accentués sont bien remplacés Smiley rolleyes :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ajout Vote</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<?php
$name = (isset($_GET['name'])) ? $_GET['name'] : '';
$email = (isset($_GET['email'])) ? $_GET['email'] : '';
$comment = (isset($_GET['comment'])) ? $_GET['comment'] : '';

if ($name != '') {
	// On récupère le message envoyé par le formulaire
	// par la même occasion, on supprimer les slashs
	$message = "nom :\n".stripslashes($_GET['name'])."\n";
	$message .= "email :\n".stripslashes($_GET['email'])."\n";
	$message .= stripslashes($_GET['comment'])."\n";
	// on modifie les caractères accentués
	$msg = strtr($message,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛܯàâãäåçèéêëìíîï©£òóôõöùúûü~ÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaceeeeiiiioooooouuuuyyy');
	//On affiche le message
echo $msg;
echo "<br /><br /><br />";
}
?>
<form method="get">
<input id="name" name="name" value="<?php echo $name; ?>" />
<input id="email" name="email" value="<?php echo $email; ?>" />
<input id="comment" name="comment" value="<?php echo $comment; ?>" />
<input type="submit" value="Envoyer" />
</form>
</body>
</html>


A+

*Edit: je viens de voir que tu as édité ton post : si tu utilises AJAX peut-être que ton encodage est l'utf-8 auquel cas cela viendrait peut-être de là Smiley ohwell
Modifié par Heyoan (27 Jun 2007 - 14:38)
je confirme..je viens de faire une page semblable à celle que Heyoan vient de montrer et les caractères accentués sont correctement traités .

Es-tu sûr de ne faire aucun autre traitement sur la variable message à part stripslashes() ?
tu as fait un copier/coller du code?
effectivement ça n'enlève pas les accents .. c'est vraiment bizarre ça!
cela viendrait du serveur alors ? arf ..
rafale29 a écrit :
tu as fait un copier/coller du code?
effectivement ça n'enlève pas les accents .. c'est vraiment bizarre ça!
cela viendrait du serveur alors ? arf ..

Oui j'ai exactement fait un copier coller, je sais si cela peut vous aider j'ai un petit phpinfo du serveur : http://www.kelio.org/phpinfo.php
A ma plus grande surprise, le problème doit venir de mon éditeur de texte gedit ! En effet en copiant collant le texte sous gedit et en enregistrant le fichier sur le serveur ftp j'ai ce problème. (mon système est en utf8 par défaut il me semble)
Je viens de me connecter en ssh sur le serveur avec un terminal en encodage iso : j'édite un nouveau fichier avec nano je copie/colle le code et miracle ça marche : voyez par vous même : http://www.vinux.info/dev/test.php

Donc il s'agit d'une erreur d'encodage de mon éditeur gedit, mais c'est un autre problème à voir ailleurs donc !

Merci à tous de vous être dérangé pour ce problème idiot Smiley smile
Modifié par vinux (27 Jun 2007 - 14:55)
Qu'est-ce que tu utilises comme éditeur ?

*Edit: t'as posté avant moi Smiley biggrin
Modifié par Heyoan (27 Jun 2007 - 14:56)
content que tu aies trouvé la solution Smiley smile parce que là ca m'étonnait que ca soit un pb du coté du serveur ..
gedit .. un linuxien est présent Smiley smile
Modifié par rafale29 (27 Jun 2007 - 14:59)
rafale29 a écrit :
content que tu ai trouvé la solution Smiley smile parce que là ca m'étonnait que ca soit un pb du coté du serveur ..
gedit .. un linuxien est présent Smiley smile

Et oui un de plus Smiley smile Microsoft n'a qu'a bien se tenir Smiley ravi

Et pour ceux ça intéresserait j'ai finalement trouvé comment changer l'encodage dans gedit : http://linuxfr.org/~WildChild/11045.html depuis le temps que je cherchais !

Bonne journée.
Ha ! les joies de php et le l'UTF-8, vivement PHP6 qui gère ca en natif .
Modifié par PeterPetrelli (27 Jun 2007 - 22:07)
PeterPetrelli a écrit :
vivement PHP6 qui gère ca en natif .

C'est clair ! Sauf que d'ici à ce que les hébergeurs le proposent (avec version MYSQL qui va bien) on sera au moins en 2009 (voire +) Smiley biggol
a écrit :
C'est clair ! Sauf que d'ici à ce que les hébergeurs le proposent (avec version MYSQL qui va bien) on sera au moins en 2009 (voire +) biggol


Perso ca m'à toujours été égal, je ne bosse qu'avec du dédié. Debian POWA !