AS3->;提供错误信息的PHP外来字符


AS3 -> PHP Foreign Characters giving incorrect information

我远非PHP专家,我正在努力解决我在这里遇到的问题。

我正在做的是从这个URL中提取核心信息:http://us.battle.net/wow/en/arena/kelthuzad/3v3/W%C3%BCstenfuchs%20zu%20gro%C3%9F/

在AS3中,这为我提供了以下来自团队名称的信息:

http://us.battle.net/wow/en/arena/kelthuzad/3v3/W%C3%BCstenfuchs%20zu%20gro%C3%9F/

现在,这很好。如果我解码URI,它会给我:

http://us.battle.net/wow/en/arena/kelthuzad/3v3/Wüstenfuchs zu groß/

当我将信息从AS3发送到PHP时,我的问题就出现了。我是在编码完整的情况下完成的,然而,无论我尝试什么,PHP都会错误地读取代码。这是输出:

var9=http://us.battle.net/wow/en/arena/kelthuzad/3v3/W¼stenfuchs zu groâ/

即使我试图解码它,它也会给出完全相同的输出。如果我把它从AS3发送到已经解码的PHP,它会再次给出与上面相同的结果。

我的AS3代码是:

var phpVars:URLVariables = new URLVariables();            
phpVars.team = _team;
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = phpVars;
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, returnResult);
urlLoader.load(urlRequest);

我的PHP代码是:

header("Content-type: text/html; charset=utf-8");
    function updateData(){    
         $team2 = mysql_real_escape_string($_POST['team']);
         echo("var9=".$team2);
         $sql = "INSERT INTO title_test SET field1='$team2'";
         mysql_query($sql);
     }

这将放入数据库:

http://us.battle.net/wow/en/arena/kelthuzad/3v3/Wüstenfuchs zu groß/

同样值得注意的是,我试图在PHP中对$team2数据进行查询,但由于编码不正确,该查询也失败了。

我在这里少了哪一步?

编辑:在数据库上启用utf-8。

Perhttp://dev.mysql.com/doc/refman/5.0/en/charset-connection.html,添加

mysql_query('SET NAMES UTF8');

就在之前

mysql_query($sql);

如果这不起作用,那么请确保您正在向服务器发送UTF8:

echo 'team2=', bin2hex($team2);

你应该看到

team2=57c3bc7374656e6675636873207a752067726fc39f

如果您发送的是UTF8。

好吧,在经历了很多心痛和头痛之后,我现在已经开始工作了。。。然而,使其发挥作用的方法似乎非常奇怪,并不是最佳实践。

AS3现在是:

var phpVars:URLVariables = new URLVariables();            
phpVars.team = decodeURI(_team);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = phpVars;
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, returnResult);
urlLoader.load(urlRequest);

PHP现在是:

$team2 = ($_POST['team']);
echo("var9=".$team2);
$sql = "INSERT INTO title_test SET field1='$team2'";
mysql_query($sql);

Connect.php现在是

mysql_connect($db_host, $db_username, $db_password, $db_name);
mysql_query('SET NAMES utf8'); 
mysql_select_db($db_name) or die (mysql_error());

现在,这将正确地将信息返回到数据库中,并允许URL查询工作。不过,返回到Flash中的回显信息仍然显示错误。

我将对此保持开放,因为我确信这种方法是不正确的。我几乎可以肯定,您应该将它从AS3中编码出来,并在PHP中对其进行解密。