dongnu4254 2010-06-08 02:04 采纳率: 100%
浏览 47
已采纳

使用UTF-8 POST变量调用Php脚本

AS3 documentation says that Strings in AS3 are in UTF-16 format.

There is a textbox on a Flash Clip where user can type some data.

When a button is clicked, I want this data to be sent to a php script.

I have everything set up, but it seems that the PHP script gets the data in UTF-16 format. The data in the database (which is utf-8) shows some unrecognizable characters (where special characters are used), meaning that the data has not been sent in a correct encoding.

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

When submit button is clicked, the following handler gets executed.

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

    varLoader.load(varSend);
}

Is there any way to send the data so that PHP script gets the data in UTF-8 format?

(PHP script is retrieving the value using the $_POST['name']).


EDIT (after useful comments):

I've tried to convert the POST variable to UTF-8 by using iconv() but I get only question marks. That may mean that I was wrong in assuming the php got the string in a UTF-16 format. It seems not. But now I have absolutely no idea how to fix this.

The characters in question are croatian characters (č, ć, š, ž and đ), all are in Windows-1250 encoding. If I manually edit the entry in phpMyAdmin and enter any of those characters, everything works great. But if I am doing it thru flash, it doesn't work.

Another strange thing, I have removed iconv and put everything like it was in the beginning and now only non-special characters get shown up to first croatian. For example, if I write "ačasdfadfa", only the "a" gets stored int the database.


Another edit:

I have now tried to switch the croatian characters into something ASCII (see the code below) and then return them to č, ć, etc. on the PHP side. Flash obviously forwards this right (since there's no special characters anymore), but the PHP does not correctly convert the chars back to the string. This is what I was doing.

http://pastebin.com/qjVcrNuV

so I guess it's something with PHP or how it stores the data into the database. The PHP file itself is UTF-8 encoded.

展开全部

  • 写回答

2条回答 默认 最新

  • dongsuo9982 2010-06-08 02:07
    关注

    Update:

    If it's indeed UTF-16 data you are getting from Flash, you could as a quick fix try converting the input in PHP:

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

    you could try that and check whether the data looks okay then. however, if at all possible, I would say it would be preferable to get Flash to send UTF-8 data.

    Old answer:

    <speculation>

    This doesn't sound like UTF-16 to me but more like UTF-8 data being displayed in an ISO-8859-1 encoded environment. Where are you outputting the variables? Is the page you are doing the output on encoded in UTF-8 as well? (See the browser's "encoding" menu) If I had to bet, I would say Flash is transmitting them correctly as UTF-8, but the problem is on the output end.

    </speculation>

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?