Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   решение проблемы передачи данных через loadVariable (http://www.flasher.ru/forum/showthread.php?t=28957)

andrrrr 22.03.2002 11:09

решение проблемы передачи данных через loadVariable
 
решение проблемы передачи данных через loadVariable: FlashMX-to-PHP и PHP-to-FlashMX.

переделывал чат (без mysql) с "пятёрки" на mx - оказадлось, что mx глотает русские символы в переменных.
для этого написал 2 функции:

! может какой-нибудь умный чел поскажет как это можно сделать проще,
! или упростить то что я тут понаписал...

всё проверено - работает ;)


<?

function mx_encode($str) {
# функция перекодирует стороковую переменную для
# отправки на FlashMX с сохранением CYR_символов
# example: $to_mx_str=mx_encode($norm_str);
# (c)_Andr
$out=null;
for ($i=0; $i<strlen($str); $i++) {
$pre=ord($str[$i]);
if ($pre>191 && $pre<256) {
# смещение D0BF..D180 = 192 (dec)
if ($pre<240) { $dta=53200; } else { $dta=53392; }
# кривой MX_код для флешы
$tmp=dechex((ord($str[$i])+$dta));
$out.="%".substr($tmp,0,2)."%".substr($tmp,2,2);
} elseif ($pre==184) {
//} elseif ($str[$i]=="ё") {
# ё -to> е
$out.="%D1%91";
} elseif ($pre==168) {
# Ё -to> Е
$out.="%D0%81";
} else {
# стандартное кодирование
$out.=rawurlencode($str[$i]);
}
}
return $out;
}

function mx_decode($str) {
# функция перекодирует стороковую переменную полученную
# из FlashMX (предварительно прошедшую ф-ю "escape();")
# для дальнейшего использования в скрипте
# example: $for_php_using=mx_decode($str_from_flashmx);
# (c)_Andr
$out=null;
for ($i=0; $i<strlen($str); $i++) {
if ($str[$i]!="%") {
# не кодируемые
$out.=$str[$i];
} elseif ($str[$i+1]!="D") {
# кодируемые 3я символами - стандартно
$out.=urldecode(substr($str,$i,3));
$i+=2;
} elseif (substr($str,$i,6)=="%D1%91") {
# гнилая буква "ё"
$out.=chr(184);
$i+=5;
} elseif (substr($str,$i,6)=="%D0%81") {
# гнилая буква "Ё"
$out.=chr(168);
$i+=5;
} else {
# кодируемые шестью символами
$dec=hexdec(substr($str,$i+1,2).substr($str,$i+4,2))-53200;
if ($dec<240) { $dta=0; } else { $dta=192; }
$out.=chr($dec-$dta);
$i+=5;
}
}
return $out;
}

?>


Часовой пояс GMT +4, время: 13:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.