2010-11-05 23 views
0

En ce qui concerne la situation suivante:Affichage d'un site UTF-8 à un site ISO-8859-1 (PHP)

www.foo.com est une page livrée en UTF-8. Il comporte un formulaire de connexion à www.bar.com/Servlet. www.bar.com est une application compatible ISO-8859-1.

J'ai le problème suivant:

chaque fois que quelqu'un utilise les caractères spéciaux comme les trémas allemands pour son mot de passe de la connexion échoue parce que le mot de passe est affiché en UTF-8, mais l'application, il attend d'être dans la norme ISO-8859 -1.

Bien sûr, je pourrais ajouter accept-charset="ISO-8859-1" attribut à la forme html, mais cela (bien sûr) ne fonctionne pas dans IE. Je pensais maintenant à un script proxy, c'est-à-dire convertir l'UTF8 en ISO-8859-1 et publier ces données sur www.bar.com/Servlet. La conversion fonctionne, aussi l'affichage (fait par CURL). Mais comme je renvoie directement le html de www.bar.com/Servlet (et il y a toujours www.foo.com dans la barre d'adresse), les liens relatifs au html ne fonctionnent pas. J'ai réussi à ajouter une balise de base à la sortie avec un remplacement laide et cela semble fonctionner, mais ce n'est pas une solution très élégante.

Existe-t-il un moyen plus simple de publier des données UTF-8 dans une application ISO-8859-1?

Code Mon CURL ressemble à ceci:

define('POSTURL', 'https://www.bar.com/Servlet'); 

array_map('utf8_decode', $_POST); 

$ch = curl_init(POSTURL); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, http_build_query($_POST)); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 

$response = curl_exec($ch); 
curl_close ($ch); 

$response = preg_replace('/(<head(.*)>)/U', "$1<base href=\"https://www.bar.com\" />", $response); 
echo $response; 

exit; 
+0

Vous ne pouvez pas convertir une donnée UTF en ASCII sans perte de données, si elle contient des caractères de bits supérieurs. –

+0

Je parle de caractères spéciaux qui existent à la fois dans le jeu de caractères UTF et ISO (comme les trémas). – acme

Répondre

0

Je n'ai pas trouvé une solution de travail simple. Ma solution est maintenant de déplacer le formulaire UTF-8 qui est posté dans un iframe sur la même page et de définir le charset à ISO-8859-1 dans cette iframe. Les messages iframe-form à target = "_ top" alors.