views:

487

answers:

1

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.

A: 

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>

Pekka
No, both the browser's encoding and the output are set to UTF-8:(html's meta: http-equiv="content-type" content="text/html; charset=utf-8"). Also, server does not set its own content-type. I've tried to display the page with the following encodings (iso-8859-1, iso-8859-2, utf-8, windows-1250) but each has at least some of the characters wrong. So I guess it's not the problem with the output. Even the data seen from the phpMyAdmin is incorrect (as in "not in utf-8").
kornelijepetak
@kornelije ah, okay. Can you paste an example of the broken characters? It's often possible to tell what goes wrong from how they are broken.
Pekka
@kornelije I added some info to my answer.
Pekka