0

AS3 文档说 AS3 中的字符串是 UTF-16 格式。

Flash Clip 上有一个文本框,用户可以在其中键入一些数据。

单击按钮时,我希望将此数据发送到 php 脚本。

我已经设置好了一切,但似乎 PHP 脚本以 UTF-16 格式获取数据。数据库中的数据(即 utf-8)显示了一些无法识别的字符(其中使用了特殊字符),这意味着数据没有以正确的编码发送。

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);

单击提交按钮时,将执行以下处理程序。

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

    varLoader.load(varSend);
}

有什么方法可以发送数据,以便 PHP 脚本以 UTF-8 格式获取数据?

(PHP 脚本正在使用 $_POST['name'] 检索值)。


编辑(在有用的评论之后):

我尝试使用 iconv() 将 POST 变量转换为 UTF-8,但我只得到问号。这可能意味着我假设 php 以 UTF-16 格式获取字符串是错误的。似乎没有。但现在我完全不知道如何解决这个问题。

有问题的字符是克罗地亚字符(č、ć、š、ž 和 đ),均采用 Windows-1250 编码。如果我手动编辑 phpMyAdmin 中的条目并输入任何这些字符,一切都会很好。但如果我是通过闪存来做的,它就行不通了。

另一个奇怪的事情是,我删除了 iconv 并将所有内容都放在了开头,现在只有非特殊字符会显示给第一个克罗地亚人。例如,如果我写“ačasdfadfa”,只有“a”会存储在数据库中。


另一个编辑:

我现在尝试将克罗地亚字符转换为 ASCII(参见下面的代码),然后在 PHP 端将它们返回为 č、ć 等。Flash 显然是正确的(因为不再有特殊字符),但是 PHP 没有正确地将字符转换回字符串。这就是我正在做的事情。

http://pastebin.com/qjVcrNuV

所以我想这与 PHP 或它如何将数据存储到数据库中有关。PHP 文件本身是 UTF-8 编码的。

4

2 回答 2

0

更新:

如果它确实是您从 Flash 获得的 UTF-16 数据,您可以作为快速修复尝试在 PHP 中转换输入:

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

您可以尝试一下,然后检查数据是否正常。但是,如果可能的话,我会说最好让 Flash 发送 UTF-8 数据。

老答案:

<speculation>

这对我来说听起来不像 UTF-16,但更像是在 ISO-8859-1 编码环境中显示的 UTF-8 数据。你在哪里输出变量?您正在输出的页面是否也以 UTF-8 编码?(请参阅浏览器的“编码”菜单)如果我必须打赌,我会说 Flash 以 UTF-8 正确传输它们,但问题出在输出端。

</speculation>

于 2010-06-08T10:07:28.077 回答
0

如果出现问号,可能是 PHP 解析错误,而不是 flash。

我把这个 .htaccess 文件(用于 php5)放在我用日语工作的网站的基本目录中,或者用特殊字符的网站......它解决了 99% 的 PHP 问题,但你仍然需要监视输入字符串(我是我自己还是习惯了)

<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>
于 2011-08-09T04:08:13.643 回答