2010-05-30 5 views
1

Je suis coincé avec un stupide problème d'encodage.As3 & PHP URLEncoding problème!

Mon problème est que tous mes caractères accentués sont affichés comme des caractères iso bizarres.

Exemple: é est affiché% E9

J'envoie une chaîne à mon fichier php:

XMLLoader.load(new URLRequest(online+"/query.php?Query=" + q)); 
XMLLoader.addEventListener(Event.COMPLETE,XMLLoaded); 

Quand je trace q, je reçois:

« INSERT INTO hello_world (message) valeurs ('éàaà'); "

La BONNE requête

Mon fichier php ressembler à ceci:

<?php 

include("conection.php");//Conectiong to database 

$Q = $_GET['Query']; 

$query = $Q; 
$resultID = mysql_query($query) or die("Could not execute or probably SQL statement malformed (error): ". mysql_error()); 

$xml_output = "<?xml version=\"1.0\"?>\n"; // XML header 
$xml_output .= "<answers>\n"; 

$xml_output .= "<lastID id=".'"'.mysql_insert_id().'"'." />\n"; 

$xml_output .= "<query string=".'"'.$query.'"'." />\n"; 

$xml_output .= "</answers>"; 

echo $xml_output;//Output the XML 

?> 

Quand je reviens mon XML dans Flash la requête $ ressemble à ceci:

"INSERT INTO hello_world (message) valeurs ('% E9% E0a% E0');"

Et ces valeurs sont ensuite affichées dans mon DB qui est ennuyeux.

Toute aide serait appréciée! À votre santé.

Jk_

Répondre

0

Mon problème est maintenant résolu! Comme et écrit ci-dessus, c'est vraiment une mauvaise idée d'utiliser GET pour envoyer une requête.

Il semble que lorsque j'ai envoyé les données à partir de Flash en utilisant:

XMLLoader.load(new URLRequest(online+"/query.php?Query=" + q)); 

l'URL a été codé et même avec urldecode j'ai eu une entrée vide dans mon DB.

Ainsi, grâce à andr et -l Raz j'ai changé la façon dont j'envoie les données à mon fichier php.

En flash j'utilise URLVariables et en PHP Je construis ma requête:

variables = new URLVariables(); 
variables.Query = "éàûï ceci est un test..."; 
request.method = URLRequestMethod.POST;   
request.data = variables; 
XMLLoader.load(request); 

Et mon fichier php ressemble à ceci:

$Q = mysql_real_escape_string($_POST['Query']); 
$query = "INSERT INTO hello_world (message) values ('".$Q."')"; 

Jk_

+0

'$ Q = mysql_real_escape_string ($ _ POST ['Requête']);'. "résolu" !. –

+0

Ouais mieux comme ça! Merci Colonel. –

0

flash peut être demande l'URL avec le paramètre codé/querystring si le décoder en utilisant php urlencode.

i.e.

$ Q = urldecode ($ _ GET [ 'requête']);

+0

Le problème quand je le fais de cette façon est que mon message de champ de base de données est vide! Les données ont été envoyées à la base de données, mais le champ est vide ... –

+0

cela peut être un problème avec votre base de données ... accepte-t-elle utf8chars? est la longueur du message dans sa portée? – KoolKabin

1

urldecode fera le travail.

Sur la note de côté, il est très mauvaise pratique pour envoyer des requêtes comme ça. Envoyez les données nécessaires, filtrez-le, puis construisez la requête, sauf si vous construisez un clone de phpMyAdmin.

+0

Dans mon cas, c'est plus simple car j'adresse différentes requêtes au même fichier php d'une classe as3. –

+0

Mais je peux comprendre pourquoi c'est une très mauvaise pratique. –

0

$ q = mysql_real_escape_string (urldecode ($ _GET ['Query']));