Jump to content

[PHP] une question d'encodage


Recommended Posts

Salut, j'ai quelques problèmes d'encodage pour mon appli, qui est, je le rappelle en java.

J'utilise un encodage utf-8 dans mon appli, mais l'hébergement est par défaut en 8859-1 (pas sûr).

Donc je voudrai savoir comment récupérer les variables du POST correctement (présence d'accents)

Autre question : comment savoir quelle est l'encodage actuel?

Merci.

Link to comment
Share on other sites

je cite le manuel PHP :

string utf8_decode ( string data )

utf8_decode décode la chaîne data , en supposant qu'elle est au format UTF-8 , et la convertit au format ISO-8859-1 .

Voir aussi utf8_encode pour plus de détails sur le codage UTF-8 .

Link to comment
Share on other sites

En PHP, il vaut mieux utiliser iconv. utf8-decode et encode fait le lien utf8 -> ISO-8859-1. Donc, si tu connais pas ton encodage de base (windows est en windows-55quelquechose), préférer iconv.

Par contre, j'ai du mal à suivre... Ton appli est en java et ton topic parle de PHP...

LSP, le manchot qui doit être fatigué

Link to comment
Share on other sites

Peut être un

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

dans le header de la page qui contient ton formulaire si c'est pas déjà fait ? :p

va savoir, peut être que le navigateur se base là dessus pour l'encodage des données du formulaire ;)

Link to comment
Share on other sites

La balise meta sert à indiquer au navigateur dans quel charset lire le flux. Ce qui formatte le charset, c'est le serveur et également, le charset dans lequel tu as écrits ton code.

Genre, en JAVA, mais aussi en PHP, tu peux régler le charset du flux via la méthode content-type("text/html charset=UTF-8") ou un truc du genre. Enfin, là chui plus en état, je me suis pris la tête la dessus toute la journée au boulot :'(

LSP, le manchot qui pleure des larmes de sang

Link to comment
Share on other sites

Après c'est bizarre quand même, j'ai jamais eu ce pb alors que j'ai aussi eu ma période UTF-8...

Les données post étaient récupérées normalement et toussa...

Sinon pour voir le charset utilisé par php et apache, les options de iconv et tout le bordel, un p'tit phpinfo() devrait faire l'affaire.

Link to comment
Share on other sites

  • 2 weeks later...

Une partie de mon code :

		String encodeType = "ISO-8859-1"
	String var_Id=null;
	String var_Key=null;
	String var_PartyName=null;
	String var_Ip=null;
	String var_Port=null;
	try {
		var_Id = "&"+URLEncoder.encode("Id", encodeType)+"="+URLEncoder.encode(Id, encodeType);
		var_Key = "&"+URLEncoder.encode("Key", encodeType)+"="+URLEncoder.encode(Key, encodeType);
		var_PartyName = "&"+URLEncoder.encode("PartyName", encodeType)+"="+URLEncoder.encode(PartyName, encodeType);
		var_Ip = "&"+URLEncoder.encode("Ip", encodeType)+"="+URLEncoder.encode(Ip, encodeType);
		var_Port = "&"+URLEncoder.encode("Port", encodeType)+"="+URLEncoder.encode(Port, encodeType);
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	}

	// Exécution du script
	URL url;
	try {
		url = new URL(Environment.siteBase+"lescript.php");
	} catch (MalformedURLException e1) {
		e1.printStackTrace();
		throw new IllegalStateException("MalformedURLException.java");
	}

		InputStream is = null;
		OutputStream os = null;
		try {

			//création de la connection
			URLConnection conn = url.openConnection();
			conn.setDoOutput(true);
			//envoi de la requête
			os = conn.getOutputStream();
			os.write(var_Id.getBytes());
			os.write(var_Key.getBytes());
			os.write(var_PartyName.getBytes());
			os.write(var_Ip.getBytes());
			os.write(var_Port.getBytes());
			os.flush();
			//lecture de la réponse
			is = conn.getInputStream(); 
			........

Le problème c'est que selon les servers ils n'ont pas forcément le même charset. Pour l'instant je suis hébergé par OVH donc j'ai un charset en 8859-1, mais si je rajoutais un serveur externe en UTF-8?

Link to comment
Share on other sites

Merci pour les réponses, y'a une dernière question que je me pose : quel est, entre les deux, le meilleur charset pour :

- les performances (comparaison de chaine, l'interfaçage avec java...)

- l'espace occupé dans la BDD

???

Link to comment
Share on other sites

Pour les perfs je pense que UTF-8 doit être plus gourmand vu qu'un caractère = 2 octets

Idem pour l'espace occupé dans la BD... 2x plus en gros :yes:

Pour l'interfaçage Java je sais pas, mais pour ce qui est des trucs genre phpMyAdmin et tous les outils mySQL officiels bah ça foire... peut être qu'ils ont corrigé le tir mais ya 6 mois les caractères spéciaux étaient pas gérés...

C'est ce qui m'a fait abandonner UTF-8 :transpi:

Link to comment
Share on other sites

Pour ce qui est de la taille je vien de tester avec des fichier texte, il y a une différence de taille (x2) que pour les caractère spéciaux (çàéè), mais les charactères (abc¤) prènnent autant de place.

Sinon pour ce qui est de phpMyAdmin il fonctionne trés bien avec l'utf8 (tester sur un serveur installé en iso avec un site en utf8 et testé sur un serveur full utf8)

Sinon a mon avis c'est pas pour rien que de nombreuse distribution linux passe à l'utf8, pour moi j'ai définitivement abandoné l'iso.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...