2010-06-08 6 views
0

La documentation AS3 indique que les chaînes dans AS3 sont au format UTF-16.Appel de script PHP avec des variables POST UTF-8

Il existe une zone de texte sur un clip Flash où l'utilisateur peut saisir certaines données.

Lorsqu'un bouton est cliqué, je veux que ces données soient envoyées à un script PHP.

J'ai tout configuré, mais il semble que le script PHP récupère les données au format UTF-16. Les données dans la base de données (qui est utf-8) montrent des caractères méconnaissables (où des caractères spéciaux sont utilisés), ce qui signifie que les données n'ont pas été envoyées dans un codage correct.

var variables:URLVariables=new URLVariables; 

var varSend:URLRequest=new URLRequest("http://website.com/systematic/accept.php"); 
varSend.method=URLRequestMethod.POST; 
varSend.data=variables; 

var varLoader:URLLoader=new URLLoader; 
varLoader.dataFormat=URLLoaderDataFormat.VARIABLES; 
varLoader.addEventListener(Event.COMPLETE, completeHandler); 

Lorsque vous cliquez sur le bouton Soumettre, le gestionnaire suivant est exécuté.

function sendData(event:MouseEvent) : void { 
    // i guess here is the problem (tbName.text is UTF-16) 
    variables.name = tbName.text; 

    varLoader.load(varSend); 
} 

Est-il possible d'envoyer les données de sorte que script PHP récupère les données au format UTF-8?

(Le script PHP récupère la valeur en utilisant $ _POST ['nom']).


EDIT (après les commentaires utiles):

J'ai essayé de convertir la variable POST en UTF-8 en utilisant iconv() mais je reçois des points d'interrogation seulement. Cela peut vouloir dire que j'avais tort de supposer que le php avait la chaîne dans un format UTF-16. Cela ne semble pas. Mais maintenant, je n'ai absolument aucune idée de comment résoudre ce problème.

Les caractères en question sont des caractères croates (č, ć, š, ž et đ), tous sont en codage Windows-1250. Si je modifie manuellement l'entrée dans phpMyAdmin et que j'entre l'un de ces caractères, tout fonctionne très bien. Mais si je le fais par flash, ça ne marche pas.

Une autre chose étrange, j'ai enlevé iconv et mis tout comme c'était au début et maintenant seuls les caractères non-spéciaux sont présentés au premier croate. Par exemple, si j'écris "ačasdfadfa", seul le "a" est stocké dans la base de données.


Une autre édition:

J'ai maintenant essayé de changer les caractères Croatian en ASCII quelque chose (voir le code ci-dessous), puis les retourner à č, æ, etc. du côté de PHP. Flash envoie évidemment ce droit (puisqu'il n'y a plus de caractères spéciaux), mais le PHP ne convertit pas correctement les caractères en chaîne. C'est ce que je faisais.

http://pastebin.com/qjVcrNuV

donc je suppose que c'est quelque chose avec PHP ou comment il stocke les données dans la base de données. Le fichier PHP lui-même est codé en UTF-8.

+0

@cornelije est-ce qu'il y a un mélange de codages ici? Une chaîne UTF-8 contenant des caractères Windows-1250 non convertis est liée à la rupture. Peut-être que Flash n'obtient pas les conversions correctement? --- Le comportement que tout se coupe après le caractère spécial est normal (l'analyse se termine avec le premier caractère en dehors de l'encodage actuellement utilisé.) –

+0

est la connexion de base de données UTF-8? ('SET NAMES utf8') –

+0

J'ai mal lu votre commentaire, je le sais, je fais mysql_set_charset ('utf8', $ con); et j'ai lu que c'est la nouvelle façon (php 5.2) de faire SET NAMES utf8. Est-ce vrai? –

Répondre

0

Mise à jour:

S'il est en effet UTF-16 les données que vous obtenez de Flash, vous pouvez aussi essayer de solution rapide conversion de l'entrée en PHP:

$name = iconv("UTF-16", "UTF-8", $_POST["name"]); 

vous pouvez essayer et vérifier si les données semblent correctes alors. Cependant, si possible, je dirais qu'il serait préférable que Flash envoie des données UTF-8.

ancienne réponse:

<speculation>

Cela ne ressemble pas à UTF-16 pour moi, mais plus comme des données UTF-8 en cours d'affichage dans un environnement codé ISO-8859-1. Où produisez-vous les variables? La page sur laquelle vous effectuez la sortie est-elle codée en UTF-8? (Voir le menu "encodage" du navigateur) Si je devais parier, je dirais que Flash les transmet correctement en UTF-8, mais le problème est sur la sortie .

</speculation>

+0

Non, l'encodage et la sortie du navigateur sont tous les deux en UTF-8: (html's meta: http-equiv = "content-type" content = "text/html; jeu de caractères = utf-8") En outre, le serveur ne définit pas son propre type de contenu J'ai essayé d'afficher la page avec les encodages suivants (iso-8859-1, iso-8859-2, utf-8, windows-1250) mais chacun a au moins quelques-uns des caractères faux Donc je suppose que ce n'est pas le problème avec le o utput. Même les données vues depuis phpMyAdmin sont incorrectes (comme dans "not in utf-8"). –

+0

@kornelije ah, d'accord. Pouvez-vous coller un exemple de caractères cassés? Il est souvent possible de dire ce qui ne va pas dans la façon dont ils sont brisés. –

+0

@kornelije J'ai ajouté quelques informations à ma réponse. –

0

si des points d'interrogation apparaissent, il est PHP probablement l'analyser mal, ne clignote pas.

J'ai mis ce fichier .htaccess (pour php5) dans le répertoire de base des sites sur lesquels je travaille en japonais, ou des sites avec des caractères spéciaux ... il résout 99% des problèmes avec PHP mais vous devez surveiller les chaînes d'entrée (Je m'y habitue encore)

<IfModule mod_php5.c> 
    php_flag output_buffering    Off 
    php_value output_handler    none 
    php_value default_charset    UTF-8 
    php_value mbstring.language    japanese 
    php_flag mbstring.encoding_translation On 
    php_value mbstring.http_input   auto 
    php_value mbstring.http_output   UTF-8 
    php_value mbstring.internal_encoding UTF-8 
    php_value mbstring.substitute_character none 
</IfModule> 
Questions connexes