Aller au contenu

[PHP] Prob de convertion [resolu]


bsh34

Messages recommandés

Voila, j'ai besoin de convertir des majuscules en minuscules et caractères spéciaux en rien "" qui sont rentrer dans un formulaire.

Pour ça, j'utilise une fonction faites maison pour tout convertir. Avant j'utilisais strtolower pour les majuscules mais finalement j'ai tout regrouper la dedans, voila tout le début du code avec l'ancien strlolower en commentaire ( au cas où :-D )

<?

$name=$_POST["nom"];
$mdp=$_POST["password"];
$opt=$_POST["option"];


#$name= strtolower($name);
#$mdp= strtolower($mdp);
#$opt= strtolower($opt);


function suppaccents($name)
{
$accents = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y",
"Z","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","È","É","Ê","Ë","è",
"é","ê","ë","Ç","ç","Ì","Í","Î","Ï","ì","í","î","ï","Ù","Ú","Û","Ü","ù","ú","û","ü","ÿ","Ñ","ñ",":",",",".",";","?","!","~","'","´"
,"(",")","/","&","%","*","\\","\"","$","[","]","{","}","|");
# passage à la ligne rajouter sur le forum pour pas mettre toute la mise en page du site en l'air
$ssaccents = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a","a","a","a",
"a","a","a","a","a","a","a","a","o","o","o","o","o","o","o","o","o","o","o","o","e","e","e","e","e","e","e","e","c","c","i",
"i","i","i","i","i","i","i","u","u","u","u","u","u","u","u","y","n","n","","","","","","","","","","","","","","","","","","","","","",
"","" );
# passage à la ligne rajouter sur le forum pour pas mettre toute la mise en page du site en l'air
$name = str_replace($accents,$ssaccents,$name);

return($name);
}

$name = suppaccents($name);
echo $name

$enreg=fopen(". ... etc

Le problème est que les caractères éèêëà etc sont affcher a�leve sous firefox et a?la?ves sous ie (en plus que mon code HTML ne soient plus compatibles IE, mais c'est une autre histroire CSS)

Alors voila, je ne comprends pas pourquoi les les caractères majuscules sont bien converti, les spéciaux aussi mais pas les accents (alors que c'est le but premier, les majuscules je peux utiliser strlolower pour le faire :| )

Et si qq'un a mieux en plus court et qui marche surtout, je suis preneur :transpi:

Merci d'avance

ps : ah oui j'oubliais, suis un noob en programmation, c'est mes premiers pas :oops:

Lien vers le commentaire
Partager sur d’autres sites

pour l'instant j'avais mis charset=iso-8859-15 dans mon html, j'ai essayé avec le utf-8 mais ça ne change rien. Toujours la même erreur :cartonrouge:

ps : pas là du weekend, dsl de pas avoir répondu avant

et arg, j'avais pas vu que le post s'était doublé, il a pas dû aimer le EDIT que j'ai fais du post principale, désolé et j'essaie les solutions données dans l'autre topic que je viens voir

Lien vers le commentaire
Partager sur d’autres sites

heuu bêtement :


  function suppaccents($text){

	$text= strtr($text,  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
	"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");

	 return $text;

   }

Je viens d'essayer ce que m'a donnée SyGEN, ça me retourne la même chose, a�la�va�s au lieu de eleve (élèvës)

J'ai juste remplacer $text par le $name que j'utilise

Lien vers le commentaire
Partager sur d’autres sites

Je viens de voir un truc bizarre, c'est que quand je met ça ça marche impec

$name = "élèvës";
$name= strtr($name, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
echo $name;

ça affiche eleves

Si je donne la valeur élèvës à $name, ça marche mais si on garde la valeur donnée par le formulaire (qui est la meme valeur) ça marche pas. Je vais devenir fou avec ce truc

Lien vers le commentaire
Partager sur d’autres sites

En passant par un formulaire simple (option, nom et password), un client crée un compte sur le serveur.

La, je ne veux pas qu'il y est de majuscule ni de caractère spéciaux pour éviter tout problème de création de compte entre l'utilisateur linux qui est créé, la bdd mysql, le compte ftp etc ...

Je vais mettre qq truc de plus car je commence à me poser des questions sur les doctype, enctype et co qu'il faut mettre dans le html

Le soucis que j'ai, c'est que je n'ai eu qu'une initiation au html (donc tout ce qui est doctype, validation w3c et co je ne connais pas) et que je n'ai fais qu'un site web perso jusqu'à présent qui été largement plus simple et qui me suffisait par rapport à ce que j'ai voulu appronfondir à l'époque. (sachant que le gars qui nous fesait l'initiation ne voulait pas attendre parler de w3c, compatibité avec firefox et compagnie :byebye:

Déjà que le w3c validator me met plein d'erreur et que j'ai pas la moindre idée d'où ça vient :zarb:

Quand au php, je connais rien et j'apprend en bossant maintenant dessus :yes: et avec l'aide de nexen.net, google.fr et pci maintenant :fou:

index.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="content-type" content="text/html"; charset="iso-8859-1">
<meta http-equiv="content-language" content="fr-FR">
<TITLE>création du compte</TITLE>
<link type="text/css" href="css.css" rel="stylesheet">
</HEAD>
<BODY lang="fr" width="100%" height="100%" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" bgcolor="#FFFFFF" background="image/backrground.jpg">
	<TABLE width="750" height="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#F2F2F2" align="center">
			<tr width="100%" height="100%">
					<form method="post" action="creation.php">
							<td height="100%" class="textebrute">
									Choix de votre option :<br>
									Gratuit : <INPUT name="option" type=radio checked value="g"><br>
									Payant : <INPUT name="option" type=radio value="p"><br>
									<br>
									Entrez votre nom :
									<INPUT name="nom" size="15"><br>
									<br>
									Entrez votre mot de passe de compte :
									<INPUT name="password" size="15"><br>
									<br>
									<INPUT type="submit" value="Envoyer">
							</td>
					</form>
			</tr>
	</table>
</BODY>
</HTML>

et le creation.php

<?

$name=$_POST["nom"];
$mdp=$_POST["password"];
$opt=$_POST["option"];

#echo qui affiche le résultat avant modif
 echo $name;

#il y a un double quote entre la virgule après $name et le début de l'alphabet en masjuscule sauf que le fourm (malgré la balise code) affiche & #34;
$name= strtr($name, "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "abcdefghijklmnopqrstuvwxyzaaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");

#echo qui affiche le résultat après modif
echo $name;
... etc ...
#création des pages, comptes 
... etc ...
?>

Lien vers le commentaire
Partager sur d’autres sites

Je viens de voir qqchose de bizarre.

Je suis passé de la method POST à GET pour voir ce que transmet le navigateur. Et là, c'est le drame.

Je rentre ËLEVES dans mon formulaire, ça passe dans l'url sous forme ?option=g&nom=%C3%8BLEVES&password=test et affiche a�leves alors que si je remplace dans l'url %C3%8B par Ë, il m'affiche ?option=g&nom=%CBLEVES&password=test et résultat eleves

Alors pourquoi IE et Firefox remplace Ë par %C3%8B au lieu de %CB :byebye:

Je commence activement à préparer une corde ou à devenir dingo

Lien vers le commentaire
Partager sur d’autres sites

Alors pourquoi IE et Firefox remplace Ë par %C3%8B au lieu de %CB :yes:

Ben non c'est logique, dans l'url les accentués sont codés de cette facon, mais bon, passer le mdp en GET c'est du n'importe quoi aussi.

Je viens de tester tes 2 phps (en get et post) et franchement ca roule. Donc comme dit plus haut, je vois qu'une mauvaise interprétation soit de ton browser, soit de ton serveur web (iso ou utf).

Lien vers le commentaire
Partager sur d’autres sites

non non, qu'on ne se trompe pas, le get s'était pour faire un test, j'utiliserai jamais la method get pour passer un des informations de mon html à mon php, suis peut etre pas bon, mais suis pas fou :yes:

Le truc sur le codage des caractères, c'est que quand je met Ë à la main, il met un autre codage que celui que le nav met d'origine.

Il met %C3%8B alors que quand je met Ë il le retranscrit en %CB

Par contre, ça doit peut etre venir du serveur lui même, dans ce cas je vais regardé. Le serveur apache étant sur une fedora Core 4 installé d'origine par les packages fedora, j'y jete un oeil direct.

Lien vers le commentaire
Partager sur d’autres sites

Donc comme dit plus haut, je vois qu'une mauvaise interprétation soit de ton browser, soit de ton serveur web (iso ou utf).

En quelques mots, je t'aime à la foliiiiiiiiiiiiiie :D

Le fichier de conf de apache avait comme charset par défaut utf-8, j'ai misISO-8859-1à la place et magique, ça marche :yes:

Pour le navigateur, je vois pas comment étant donner que je sais pas où on modifirait ça.

J'ai par contre réglé un mal pour un autre, c'est que maintenant j'ai la plupart des accents de mon code HTML qui sont affiché zarb, et c'est parti pour les é et co, mais ça c'est facile ^^

EDIT : Fait pour le résolu

Et je préfére tout faire en iso vu qu'en ce qui concerne l'UTF, j'ai tout essayé pour que ça marche en UTF sans pour autant réussir, si l'iso marche, alors je ferais tout en iso

Lien vers le commentaire
Partager sur d’autres sites

En quelques mots, je t'aime à la foliiiiiiiiiiiiiie :-D

Du calme du calme :transpi:

Le fichier de conf de apache avait comme charset par défaut utf-8, j'ai misISO-8859-1à la place et magique, ça marche :yes:

En tout logique c'est pas bien de faire ca normalement tu dois pouvoir t'adapter au codage du serveur et donc le mieux c'est de passer par un fichier de config pour ton php qui code en utf ou en iso tes pages. Mais bon soit, si c'est ton serveur et que tu bosses qu'en iso, alors oui, c'était la soluce la plus simple.

P.S. tu peux éditer et mettre [résolu] dans le titre du msg ;p

Lien vers le commentaire
Partager sur d’autres sites

moi perso pour ce qui est des pass login je ferai un test sur la validité de la chaine au niveau des caractères plutot que de les remplacer et si pas bon ben tu préviens l'utilisateur que seul les carateres normaux et les chiffres sont autorisés.

une bonne expression régulière et ton truc tien en 2 lignes.

j'ai plus la syntaxe exact vu que je suis au taff mais ca doit se trouver facilement.

ca donne un truc du genre

$exp = "[a-zA-Z0-9]*"; // masque pour les caractères minuscules, majuscules et chiffres uniquement et n fois
ereg($exp,$chaine); // retourne false si la chaine ne correspond pas au masque $exp, sensible à la case

avec une tell méthode tu peux vérifier n'importe quelle validité de chaine en changeant le masque

genre la forme d'une adresse mail ect....

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...