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.
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.
@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é.) –
est la connexion de base de données UTF-8? ('SET NAMES utf8') –
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? –