0

我远非 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/

现在,这很好。如果我 decodeURI 它,它会给我:

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。

4

2 回答 2

0

根据http://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。

于 2012-08-19T18:06:45.747 回答
0

好的,在经历了很多心痛和头痛之后,我现在已经开始工作了……但是使它工作的方法似乎很奇怪,而且不是最佳实践。

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 中取消编码。

于 2012-08-19T19:04:34.277 回答