Вот, двое суток не ел и не спал, практически =)))
Собственно, что это все делает:
Позволяет во флешке закодировать ХМЛ в одну из быбраных кодировок, отослать ПХП и в ПХП мы можем узнать в какой кодировке к нам пришла строка и по желанию конвертнуть ее во что-то другое. Немного бесцельное занятие, т.как я бы просто все делал в УТФ-8, но иногда бывает нужно (фз зачем, но мало ли), чтобы ХМЛ на сервере сохранился в отличной от УТФ-8 кодировке... Вобщем, вот:

Код:
package
{
import flash.display.Sprite;
import org.wvxvw.phputils.XMLSender;
public class Main extends Sprite
{
public var xs:XMLSender;
public var testXML:XML =
<xml>
<English>
English text
</English>
<Russian>
текст по - русски
</Russian>
</xml>;
public function Main():void
{
xs = new XMLSender();
xs.sendXML(testXML, 'http://localhost/flashtest/flashreceiver.php', XMLSender.WINDOWS_1251);
}
}
}

Код:
/**
* ...
* @author wvxvw
*/
package org.wvxvw.phputils
{
import flash.events.EventDispatcher;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
import flash.net.URLRequestHeader;
import flash.utils.ByteArray;
import flash.utils.Endian;
public class XMLSender extends EventDispatcher
{
public static const US_ASCII:String = 'us-ascii';
public static const UTF_8:String = 'utf-8';
public static const ISO_8859_5:String = 'iso-8859-5';
public static const KOI8_R:String = 'koi8-r';
public static const WINDOWS_1251:String = 'windows-1251';
private var ur:URLRequest;
private var ul:URLLoader;
private var ba:ByteArray;
private var xml:XML;
private var encodedString:String;
public function XMLSender()
{
super();
ul = new URLLoader();
ul.dataFormat = URLLoaderDataFormat.BINARY;
ul.addEventListener(Event.COMPLETE, handleComplete);
ul.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
ul.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
}
public function sendXML(source:Object, url:String, encoding:String = UTF_8, endian:String = Endian.LITTLE_ENDIAN):void
{
try
{
xml = new XML(source);
} catch (e:Error) {
trace('unable to convert to XML');
}
encodedString = xml.toXMLString();
ur = new URLRequest(url);
var h:URLRequestHeader = new URLRequestHeader('Content-Type', 'application/octet-stream');
ur.method = URLRequestMethod.POST;
ur.requestHeaders.push(h);
ba = new ByteArray();
ba.endian = endian;
trace(encodedString);
ba.writeUTFBytes(encoding);
ba.position = 20;
ba.writeMultiByte(encodedString, encoding);
ba.position = 0;
ur.data = ba;
ul.load(ur);
}
public function handleComplete(evt:Event):void
{
trace('complete', ul.data);
}
public function handleIOError(evt:Event):void
{
trace('IO', evt);
}
public function handleSecurityError(evt:Event):void
{
trace('security', evt);
}
}
}

Код:
<?php
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
mb_http_output("UTF-8");
ob_start("mb_output_handler");
require_once("includes/receiver.inc");
$rec = new Receiver();
$bom = "\xEF\xBB\xBF";
print $bom . $rec->toString();
?>

Код:
<?php
class Receiver extends DOMDocument {
public static $US_ASCII = "us-ascii";
public static $US_ASCII_PHP = "cp1252";
public static $UTF_8 = "utf-8";
public static $UTF_8_PHP = "UTF-8";
public static $ISO_8859_5 = "iso-8859-5";
public static $ISO_8859_5_PHP = "ISO-8859-5";
public static $KOI8_R = "koi8-r";
public static $KOI8_R_PHP = "KOI8-R";
public static $WINDOWS_1251 = "windows-1251";
public static $WINDOWS_1251_PHP = "Windows-1251";
public $src;
public $enc;
function __construct() {
parent::__construct("1.0", "utf-8");
if(isset($GLOBALS["HTTP_RAW_POST_DATA"])){
$ienc = mb_substr($GLOBALS["HTTP_RAW_POST_DATA"], 0 , 20, Receiver::$UTF_8_PHP);
$ienc = trim($ienc);
switch($ienc) {
case Receiver::$UTF_8:
$this->enc = Receiver::$UTF_8_PHP;
break;
case Receiver::$US_ASCII:
$this->enc = Receiver::$US_ASCII_PHP;
break;
case Receiver::$ISO_8859_5:
$this->enc = Receiver::$ISO_8859_5_PHP;
case Receiver::$KOI8_R:
break;
case Receiver::$WINDOWS_1251:
$this->enc = Receiver::$WINDOWS_1251_PHP;
break;
default:
exit("unrecognised encoding " . $ienc);
}
$lnt = mb_strlen($GLOBALS["HTTP_RAW_POST_DATA"], $ienc) - 20;
$this->src = mb_substr($GLOBALS["HTTP_RAW_POST_DATA"], 20, $lnt, $this->enc);
$this->src = iconv($this->enc, Receiver::$UTF_8_PHP, $this->src);
$sxml = simplexml_load_string($this->src);
$dxml = $this->importNode(dom_import_simplexml($sxml), true);
$this->appendChild($dxml);
} else {
$nodata = $this->appendChild($this->createElement("noData"));
$nodata->appendChild($this->createTextNode("No data posted!"));
}
}
/**
* @return string
*/
function toString() {
return $this->saveXML();
}
}
?>
Есси честно, то, возможно можно как-то по-проще... но, застрелите меня, я не знаю как...
ЗЫ. Еще одно полезное применение: можно из этой штуки сделать трейсер для ФД, например, для того, чтобы корректно выводил русские тексты (для тех, у кого вторя дефолтная раскладка клавиатуры не русская).
Т.е. то, что нужно вывести в трейс отсылаем ПХП скрипту, он это конвертит / логирует, и возвращает в другой кодировке. Так что можно будет и в ФД трейс посмотреть, и потом почитать, если что =)