PDA

Просмотр полной версии : Русский текст из xml, формата win1251, не отображает


MINASTIS
02.04.2007, 07:51
Приветстсвую. Я много в поиске читал, и в Чаво посмотрел.. Кроме System.useCodePage ничего путного не нашел... Или просто темы двухгодичной давности так и не решенные нормально (наверно участники в привате дальше говорили =] )
У меня есть на сервере файл xml, он для гостевой. Его формат win1251, в него php записываются данные, русский текст, но когда ролик грузит этот xml файл в себя, то вместо русского текста там типичные квадратики... А если весь xml файл из русского текста (ну теги конечно латиницей написаны) то он вобще не отображается в ролике. Вопрос:
Каким образом заставить Flash читать русский текст из xml файла, не используя System.useCodePage, и не переделывая файл в Юникод кодировку?

Kikasso
02.04.2007, 08:03
Публикуя под 5-й плеер.))
А что мешает конвертнуть на сервере? Волшебное слово iconv ( функция php)
Не хотите конвертить, useCodePage.
iconv
(PHP 4 >= 4.0.5, PHP 5)
iconv -- Преобразовывает символы строки в другую кодировку
Описание
string iconv ( string in_charset, string out_charset, string str )
Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset. Возвращает строку в новой кодировке, или FALSE в случае ошибки.
Если добавить //TRANSLIT к параметру out_charset будет включена транслитеризация. Это означает, что вслучае, когда символа нет в конечной кодировке, он заменяется одним или несколькими аналогами. Если добавить //IGNORE, то символы, которых нет в конечной кодировке, будут опущены. Иначе, будет возвращена строка str, обрезанная до первого недопустимого символа. <?php
echo iconv("Windows-1251", "UTF-8", "Пора переходить на юникод.");
?>

etc
02.04.2007, 12:53
У меня вопрос: зачем вообще что-то делать с кодировкой? Зачем её мурыжить и создавать себе проблемы? Почему формат xml именно win, а не utf?
Ответ на вопрос в первом посте: с помощью AS3.

MINASTIS
02.04.2007, 14:52
__etc формат такой, как я ранее говорил, потому что "даже если поставить utf, php скрипт кодировку файла изменяет самолично на win, когда используешь параметр 'w' открытия файла", поэтому я ищу выход, как же считать из кодировки win, потому как сохранить эту кодировку utf файла невозможно (из-за интересного php скрипта который самолично кодировку изменяет =( ).

Каким образом с помощью AS3? Есть ли где-нибудь статейка на эту тему?

CorC
02.04.2007, 14:55
я все время считываю и из текстовиков и из MySQL
где и там и там стоит utf-8
но ни разу еще php мне менял кодировку
если что то iconv поможет

MINASTIS
02.04.2007, 15:14
Вот у меня просто волшебный php скрипт! Я только что файл сохранил в Юникоде, запустилд скрипт добавления через гесту, написал по русски. Мало того, что у меня геста не получает подтверждение загрузки LoadVars-a (так и остается на одном фрейме, хотя аглицкими буквами когда пишу все ок), так она отказывается загружать русский текст из файла. Странно, сказал я себе. Вроде кодировка Юникод... Смотрю, а файл уже кодировки win! Как так получилось не понимаю! Волшебный скрипт млин. Вот посмотрите его код, может найдете чего он мне файл кодировку меняет:

<?php
$filename = "guest/book.dat";
$fd = fopen($filename, "r");
$prev = fread($fd, filesize($filename));
fclose($fd);
$allm = "<post date='".$_GET['_date']."' name='".$_GET['_nick']."' page='".$_GET['_page']."' mail='".$_GET['_mail']."'>".$_GET['_message']."</post>";
$addall = $allm.$prev;
$fd = fopen($filename, "w");
fwrite($fd, $addall);
fclose($fd);
?>

Вот код вызова скрипта через LoadVars во флеше:

stop();
var script:LoadVars = new LoadVars();
trace(_page+"_"+_mail);
//if (_page==undefined) _page="-";
script.load("guest.php?_nick="+_nick+"&_date="+_date+"&_mail="+_mail+"&_page="+_page+"&_message="+_message);
script.onLoad = function (ok:Boolean):Void {
if (ok) {
play();
}
}

Вроде все правильно. Но в чем тогда ошибка? Что php творит с кодировкой и почему флеш не читает файл?

etc
02.04.2007, 15:15
"даже если поставить utf, php скрипт кодировку файла изменяет самолично на win, когда используешь параметр 'w' открытия файла"
Сказки. php ничего не преобразовывает при записи.
Ищи ошибку внутри флеша, где-нибудь, да useCodepage включен.

MINASTIS
02.04.2007, 15:23
__etc я даже самолично написал System.useCodepage = false вначале.
Ничего не дает =(
Вот полюбуйтесь. До применения скрипта файл выглядел так (с кодировкой Юникод):

<post date='2.31.2007' name='Минастис' page='-' mail='-'>Кагдила медведы?</post>

После добавления такой же информации он стал выглядеть так:

<post date='2.31.2007' name='Минастис' page='-' mail='-'>Кагдила медведы2 ?</post>яю< - а дальше идут многочисленные "иероглифы"

Что это такое? Как так он взял да изменил символы прошлые? Просто разломал предыдущее сообщение, добавил новое, и превратил все это в другую кодировку =((
Что же делать?

Вобще интереснее всего, что php в "глокую куздру" превращает текст предыдущих сообщений только если писать русским... Может все-таки проблема с этим кодом... Который для русского текста в input?

fixWMode = function(str) {
var index = Selection.getCaretIndex();
var broken = str.split(chr(4));
for (var i = 1; i<broken.length; i++) {
broken[i] = String.fromCharCode(1024+broken[i].charCodeAt(0))+broken[i].substr(1);
}
var out = broken.join("");
if (index<out.length-1&&str.length!=out.length) {
Selection.setSelection(index-1,index-1);
}
return out;
}
nick.onChanged = function() {
this.text = fixWMode(this.text);
};
messag.onChanged = function() {
this.text = fixWMode(this.text);
};

Ведь именно после с измененных полей идут значения в php файл...

CorC
02.04.2007, 16:10
а в 5 строке что за хитрая вещь?
может она все ломает?

etc
02.04.2007, 16:11
В самом скрипте в принципе все нормально.
Проблема может быть в хостинге и настройках php.

Отключи transparent и проверь без фикса.

MINASTIS
02.04.2007, 18:44
CorC железная логика! =)) Прямо дословно перевел broken(с англ) - сломанный.

__etc также и осталось =(
Но я нашел несколько признаков того, что новые данные php некорекктно записывает (вместо русского текста в новом узле китайские народные иероглифы), а старые (то есть старые узлы с русским) он оставляет как есть...
Вот еще раз ярчайший пример. Прямо сейчас в Notepad++ изменил кодировку на utf-8, сделал загрузку русского текса. Работает. Потом попробовал в гесте добавить сообщение с русским текстом. Предыдущее сообщение в файле осталось нормальным, а новое записалось некорекктно... К тому же кодировка изменилась на ANSI =(((
Нет ну прямо нерешимая какая-то проблема. Так и в Денвере, так и в инете!
Кто-нибудь знает в чем проблема?

ПС. Вот исходник. Может в нем что увидите? Я уже и не знаю чего творить чтобы он нормально с русским работал...
http://lingua.h18.ru/indexx.rar

Там пятый фрейм с гестой

Кстати, может ли быть виной проблемы, что я в xml файле не объявил строчкой кодировку и язык самого xml файла? Как обычно так делают.

Kikasso
02.04.2007, 20:30
А из броузера не пробовал отправлять? Сваргань html с формой, проставь ему utf-8 и смотри что получится.

MINASTIS
02.04.2007, 20:31
Сейчас попробую... отпишусь через 10-15 минут.

Kikasso
02.04.2007, 20:36
добавь еще в пыхпых phpinfo() и посмотри, в какой кодировке приходит, чтоб не оставалось сомнений

MINASTIS
02.04.2007, 20:44
Добавляет русский текст отлично, не изменяя и не коверкая старые сообщения. Но кодировку сразу снова с utf-8 на ansi меняет.
Вот что насчет кодировки в phpinfo() выдало
SERVER["HTTP_ACCEPT_ENCODING"] gzip, deflate

Не понимаю. Почему он кодировку изменяет?! Не будь этой проблемы все отлично бы грузило...

Kikasso кстати а ты смотрел мой исходник? Может там я чего намудрил?

Kikasso
02.04.2007, 21:52
Если сервер мудрит с кодировками, стало быть он так настроен - ничего с этим не поделаешь. Этим грешит русский апач, я с этим сталкивался - он мне при uploade картинки переконвертировал)). Можно что-то написать в .htaccess, но об этом лучше спрашивать техподдержку хостера. ХЗ. Я пас.

MINASTIS
02.04.2007, 22:12
Kikasso =]] Почему только у меня такие проблемы? Ну почему я все делаю и почему-то невидимые ошибки да есть?! =]]
Эх ладно, буду ждать, можеть кто-нибудь знает в чем проблема...
А насчет сервера так я на 3-х хостингах проверял и у себя на Денвере...

ПС. Кстати ты посмотрел исходник? Там все нормально? Может все-таки увидишь, я чего там не так сделал?

Люди помогите пожалуйста! Скажите что у меня не так?

etc
02.04.2007, 22:47
Я уже предлагал сменить хостинг.

MINASTIS
02.04.2007, 22:56
__etc Имеешь ввиду что и Денвер и два других хостинга имеют одинаковые проблемы?... =0
По моему Денвер то не должен такого делать (ну с кодировкой)...
Ну что же. Попробую. Попробую еще на один бесплатный. Я должен удостовериться что проблема в хостинге, и что не зря буду покупать платный.

etc
02.04.2007, 22:57
У меня ничего подобного на том же Денвере не наблюдается.

MINASTIS
02.04.2007, 23:01
__etc ты имеешь ввиду ты протестил этот ролик со скриптом у себя и он кодировку не меняет? И русский язык грузит и добавляет? =0
Скажи пожалуйста сайт денвера, я скачаю новую версию.

etc
02.04.2007, 23:06
Не тестил, но по приведенному коду такого наблюдаться не должно.
Сайт http://www.denwer.ru

MINASTIS
03.04.2007, 14:05
Попробую денвер новый скачать. Если не поможет придется не Xml файл записывать, а как все делают-записывать сообщения через определенный символ, и после по нему в php разделять и выводить.

__etc не помогло... Хм.. что то по моему во флеше не то... Самое интересное в том, что он и в ANSI кодировке читает русский текст, но только если добавлять после русского английские сообщения. Только добавляю русское сразу все предыдущие сообщения превращаются в куча бредовых символов (точнее русский язык в пред. сообщениях). Ты не смотрел исходник? Там все нормально сделано?

Люди подскажите пожалуйста тогда ссылки на исходники гостевых книг схожего с моей характера.
Интересно проверить будут ли они так же глючить или нет. Может по другому придется тогда делать гесту...

Не сочтите за флуд, ибо никто так и не отвечает...
Кроме как во флеше я ошибки не могу нигде подозревать... Денвер новый даже скачал все равно не работает правильно с русским языком.

Может кто-нибудь пожалуйста посмотреть мой исходник, и сказать, на 5-ом фрейме без ошибок загрузка и сохранение данных сделаны в гостевой книге? Или есть там что-то что мешает правильной работе гесты?

Kikasso
03.04.2007, 21:20
Спокойнее, друг. Посмотрим.

etc
03.04.2007, 21:33
Вот тебе гостевые:

http://flasher.ru/src/kind/%7Bset.cat=36%7D

Kikasso
03.04.2007, 21:38
1) Это новый исходник или старый? Что там опять с useCodepage? Совсем убери. закомментируй что-ли
2) pole.htmlText += ".." в цикле принципиально неправильно. Пишите
str = pole.htmlText;
// Далее в цикле
str += ".." ;
// Цикл окончен
pole.htmlText = str; Потому что htmlText - это getter/setter, и это неоправдано жрет ресурсы, и к тому же добавляются лишние тэги "<p>"
3) вот эта конструкция:this.createEmptyMovieClip("clip"+i,this.getNextHighestDepth());
this["clip"+i]._x = this.thisx;
this["clip"+i]._y = this.thisy;
this["clip"+i].createTextField("pole",3,0,0,550,10);
this["clip"+i].pole.textColor = 0x212534;
this["clip"+i].pole.multiline = true;
this["clip"+i].pole.wordWrap = true;
Почему не написать проще?
var clip = this.createEmptyMovieClip("clip"+i,this.getNextHighestDepth());
clip._x = this.thisx;
clip._y = this.thisy;
var pole = clip.createTextField("pole",3,0,0,550,10);
pole.textColor = 0x212534;
pole.multiline = true; Побережем ресурсы!
И уберите wmode=transparent. Где кстати форма для отправки сообщений? Что-то я ее не нашел. А так ошибок пока не вижу, так, замечания.

upd: Вот это что-ли?
script.load("guest.php?_nick="+_nick+"&_date="+_date+"&_mail="+_mail+"&_page="+_page+"&_message="+_message);
используйте sendAndLoad вместо load.
Еще момент - всем приходящим данным в php надо делать trim(), а то получите сообщение из пробелов, переводов каретки или еще чего похуже.

MINASTIS
03.04.2007, 21:42
__etc не сочти за невежество... Но эти гостевые я просматривал два дня назад, и у них немного другая система... У них не xml а loadVariablesNum и еще чего-то...

Kikasso все изменил с htmlText и там подрихтовал... А так весь код правилен загрузки гесты? И отправки сообщения?

Kikasso sendAndLoad я поставил так он не захотел принимать onLoad тогда. Просто не проигрывал дальше. Не хочет sendAndLoad работать.
А вот trim()... В каких случаях сообщения могу придти с кучей пробелов переводов картетки и др.? В тех если юзер самостоятельно захочет так написать?

Kikasso
04.04.2007, 00:36
Кроме юзеров бывают кулхацкеры, и таких полно. Эта операция обходится дешево, так что @$text = trim($_POST['text']); и не сомневайся. Собака - чтобы подавить возможный warning.
sendAndLoad:
my_lv.sendAndLoad( "somefile.php", my_lv );
тут есть момент.. Это класс LoadVars, а тебе нужен в ответ XML.
Значит
my_xml = new XML();
my_lv.onData = function( src ){
my_xml.parseXML( src );
show_messages( my_xml );
}
Ясен принцип?
Или сразу формируй и посылай xml, это чуть сложнее вкурить, зато правильнее.

MINASTIS, чем вы пользуетесь для верстки?? вот это что вообще такое:
</textarea></form></title></comment></a></div></span></ilayer></layer></iframe></noframes></style></noscript>
</table></script></applet></font>
Я не понимаю как это вообще открывается.
И что за джаваскрипт для впечатывания флеша?? Используйте проверенный: http://blog.deconcept.com/swfobject, но только после того как все заработает просто в object/embed.
И transparent уберите.
upd: ник нечаянно

MINASTIS
04.04.2007, 14:01
Kikasso я делаю public во флеше. А тот код который ты показал добавляет хостинг, то есть рекламу.
Вот мой код впечатывания:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="100%" height="100%" id="indexx" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="indexx.swf" /><param name="quality" value="high" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#666666" /><embed src="indexx.swf" quality="high" wmode="transparent" bgcolor="#666666" width="100%" height="100%" name="indexx" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>


Что-то не совсем понял принцип... Я LoadVars использую только чтобы переменные передать в php скрипт, зачем XML получать?
XML я получаю сначала из другого XML объекта... Когда сообщения загружаю.
Или я совсем не так все понял?...

ПС. И прошу хватит мой ник коверкать. То Minastic то Minastys. Правильно Minastis.

Kikasso trip не работает... =(
Я делаю
@$addall = trip($addall);

etc
04.04.2007, 15:46
Kikasso trip не работает... =(
Я делаю
@$addall = trip($addall);
Монитор нужно протирать :))
Прочитай пост Kikasso ещё раз.

MINASTIS
04.04.2007, 18:43
__etc а там же $_POST... Дошло =)))

ПС. Эй и кстати вы что все сговорились такие аватары ставить с двумя буквами?! =))

etc
04.04.2007, 18:46
__etc а там же $_POST... Дошло =)))
Не дошло. Хотя и это тоже. Название функции trim.

з.Ы. Сговорились.

MINASTIS
04.04.2007, 18:58
Название это я на форуме опечатку сделал, так то написал trim

Теперь он мне вобще просто файл очищает и не записывает в него ничего =(
Вот код:

<?php
$filename = "guest/book.dat";
$fd = fopen($filename, "r");
$prev = fread($fd, filesize($filename));
fclose($fd);
$allm = "<post date='".$_GET['_date']."' name='".$_GET['_nick']."' page='".$_GET['_page']."' mail='".$_GET['_mail']."'>".$_GET['_message']."</post>";
$addall = "$allm$prev";
$addall = stripslashes($addall);
@$addall = trim($_POST['addall']);
$fn = fopen($filename, "w");
fwrite($fn, $addall);
fclose($fn);
phpinfo();
?>


Что я снова намудрил? =(

P.S. Такие аватары показатель чего-то или просто для красоты?...

etc
04.04.2007, 19:10
Ну правильно, ты берешь addall из POST-массива, а его нет. Следовательно, $addall пуст (ошибки нет в силу @ перед выполнением).

MINASTIS
04.04.2007, 19:16
__etc ты имеешь ввиду что эту строку надо после добавления в файл ставить?...

Может ли быть не восприятие русского языка из-за вот этих строчек в странице с роликом?

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />


И как же все таки и после чего использовать trim с $_POST?

Kikasso
04.04.2007, 20:44
Вот из- за чего русские буквы не работают: wmode="transparent"
trim работает просто:
<pre>
<?php
$txt = "\n\t bla-bla \n\tеще текст \r\n";
echo "----------------------\n";
echo $txt;
echo "\n----------------------\n";
echo trim($txt);
echo "\n----------------------";
?>
</pre>Обрезает все пробельные символы сначала и с конца.
http://www.php.net/manual/ru/function.trim.php
За ник сорри, случайно.
А насчет рекламного кода.. Что-то я не нашел открывающих тегов, только закрывающие. Наверное это у меня максон так рекламу вырезал, не вполне корректно.
Чарсет страницы не должен вроде влиять на флешовые дела, у меня нормально уникодом посылалось. Хотя если шлешь GET'ом..


Вот мой код впечатывания:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="100%" height="100%" id="indexx" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="indexx.swf" /><param name="quality" value="high" />
<param name="wmode" value="transparent" /><param name="bgcolor" value="#666666" /><embed src="indexx.swf" quality="high"
wmode="transparent" bgcolor="#666666" width="100%" height="100%" name="indexx" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

Выделеное убери - это корень зла в данном случае.

Что-то не совсем понял принцип... Я LoadVars использую только чтобы переменные передать в php скрипт, зачем XML получать?
XML я получаю сначала из другого XML объекта... Когда сообщения загружаю.
Тогда все нормально. Используй sendAndLoad, тем более что POST не кешируется.

MINASTIS
04.04.2007, 21:07
Хм... Попробовал сделать так:

<?php
$filename = "guest/book.dat";
$fd = fopen($filename, "r");
$prev = fread($fd, filesize($filename));
fclose($fd);
$allm = "<post date='".$_GET['_date']."' name='".$_GET['_nick']."' page='".$_GET['_page']."' mail='".$_GET['_mail']."'>".$_GET['_message']."</post>";
$addall = "$allm$prev";
$gonnatrim = $addall;
$addall = trim($gonnatrim);
$addall = stripslashes($addall);
$fn = fopen($filename, "w");
fwrite($fn, $addall);
fclose($fn);
?>

Что-то не удаляет он \n и \r... =((

Так флешка и не воспринимает русский язык... Совсем нивкакую не хочет... =((
Я изменил чарсет дык он вобще перестал принимать подтверждение загрузки php скрипта. Пришлось снова на koi переписать. >=[

Есть еще мысли что же с русским языком произошло у меня нас странице?...

Ты имеешь ввиду

script.sendAndLoad("guest.php?_nick="+this._nick+"&_date="+this._date+"&_mail="+this._mail+"&_page="+this._page+"&_message="+this._message, script);
script.onLoad = function (ok:Boolean) {
if (ok) {
play();
}
}
?

Кстати, почему сразу корень зла? (я убрал уже). Ведь благодаря этому в гесте пока никто не сможет писать на русском. Сейчас только символ на русском и вся геста слетит =(( Со всеми сообщениями!

Kikasso
04.04.2007, 21:43
@$date = $_POST['_date'];
$date = ( isSet( $date ) && trim($date) != "" ) ? trim($date) : "" ;
// почему кстати не gmdate? Время по гринвичу, как использовать см. http://www.php.net/manual/ru/function.gmdate.php
//ну и так далее, можно без собачки:
$nick = ( isSet($_POST['_nick']) && trim($_POST['_nick']) != "" ) ? trim($_POST['_nick']) : "anonimous";
$message = ( isSet($_POST['_message']) && trim($_POST['_message']) != "" ) ? trim($_POST['_message']) : "нет текста";
// а теперь можно все складывать.

Вот так использовать trim.
script:LoadVars = new LoadVars();
script._nick = this.nick;
script._date = this._date;
script._mail = this._mail;
script._page = this._page;
script._message = this._message;
script.onLoad = function (ok:Boolean) { if(ok) play(); }
script.sendAndLoad("guest.php", script )
Вот что имею в виду. Вполне возможно, что GET сервак перекодирует.
Чтобы не вводили чего не попадя, есть свойство текстового поля restrict. Данные лучше подрезать перед отправкой, но это не так просто - trim во флеше не найден. Но написан.

etc
04.04.2007, 22:00
Kikasso, а где у тебя указан режим POST?

MINASTIS
04.04.2007, 22:00
Он не хочет без добавлений в адрес переменных эти переменные принимать. Ты показал как использовать trim и время правильное сделать?
Кстати если это действительно Get сервер перекодирует то тогда как это исправить?

Kikasso
04.04.2007, 22:05
Kikasso, а где у тебя указан режим POST?
Usage
my_lv.sendAndLoad(url, targetObject[, method])Он по умолчанию идет.

Ну можно и написать, худа не будет:

script.sendAndLoad("guest.php", script, "POST");

MINASTIS, все написал - подправил.

etc
04.04.2007, 22:09
А, ну да. Но все-равно, для ясности, лучше указать.

Где у вас там GET, если вы все POST-ом шлете?

MINASTIS
04.04.2007, 22:41
Получается не может Get изменять кодировку так как Post используется? Хм... Что же тогда изменяет кодировку?
Такое ощущение что проблема все таки во флеше. Так теоретически нигде не должна быть ошибка.

Kikasso
04.04.2007, 22:49
Ну так сделайте ПРОСТОЙ файл с одним текстовым полем и одной кнопкой и ПРОСТОЙ файл на серваке для приема. И заодно HTML - форму.
Для приема данных из html-формы сгодится такой файл:
<?php
phpinfo();
?>

MINASTIS
04.04.2007, 22:55
в смысле сделать заново гесту с одним текстовым полем?
Или для теста сделать форму с добавлением из одного текстового поля с помощью php файла(простого) в другой файл? Это для проверки поменяет ли он кодировку или зачем?

etc
04.04.2007, 22:59
Слишком много вопросов.
Догадаться, что нужно сваять простенький пример (максимально упрощенный), чтобы убедиться, что сервер непричем, можно было и самому.

MINASTIS
04.04.2007, 23:40
Кодировку файла изменил на ansi. Русский текст который был в файле предыдущий не коверкал и не изменял. Просто добавился новый русский текст, и изменилась кодировка. А во флеше если добавлять предыдущий русский текст видоизменяется до иероглифов.
То проверил или что то другое надо было? =)

etc
04.04.2007, 23:42
MINASTIS, а своих мыслей у тебя вообще нет, что-ли?

MINASTIS
05.04.2007, 00:14
Есть. Просто я не выспался =]
В общем получается сервер изменяет кодировку, а из флеша к тому же некорректно принимает русский текст и записывая в файл не только изменяет кодировку но и ломает русский текст который уже был в файле. Чего не наблюдается при добавлении через форму, где только кодировка изменяется. Вопрос: каким образом предотвратить смену кодировки сервером, и каким образом заставить через флеш скрипт работать с русским языком корректно?

Kikasso
05.04.2007, 00:36
тестовые файлы покажи, я проверю на нормальном хостинге.
все в архив, html, fla, swf и php.

MINASTIS
05.04.2007, 00:49
Я смогу завтра вечером все скинуть. Сейчас инета нет - через смарт сижу. Закину исходник сайта, его swf, все для гесты(файл с сообщениями и сам скрипт), и тестовую форму тоже.
Если есть Денвер было бы неплохо проверить. Кто знает может у меня с виндой/компом что-то не то. Поэтому на другом Денвере надо протестить будет ли та же проблема или нет. В общем завтра выложу архив.

Kikasso
05.04.2007, 01:45
Нет, не сайта и не гестбука, ни в коем случае - только тестовые файлы. И смотри, чтоб все в 5 кб уложилось!:mad:

MINASTIS
05.04.2007, 13:21
Вот архив. Весит меньше 5кб, гарантирую. =)

Kikasso
05.04.2007, 15:06
А флешка где?

MINASTIS
05.04.2007, 16:50
К сожалению в 5кб не уложился. Только в 7.:confused:

Кстати важная и более точная информация. Текст из флеша в скрипт приходит в ansi кодировке, хотя изначально файл с сообщениями состоит из текст utf-8 кодировки. Скрипт принимает текст ansi кодировки из флеша и подстраивает под него файл - перекодирует его. Но несмотря на это, даже если файл ansi кодировки становиться, сообщения (которые в ansi выглядят как "иероглифы") utf-8 русские исправно читаются во флеш. Но сообщения русские уже ansi кодировки флеш не воспринимает а иногда совсем не читает xml если там есть такие русские ansi буквы. Видимые решения проблемы: приходящий текст перкодировать в utf-8 и записывать его вфайл с сообщениями. Вопрос: функция iconv действительно может string перекодировать из ansi в utf-8?

Что-то не работает у меня iconv...

<?php
$filename = "guest/bookflash.dat";
$fd = fopen($filename, "r");
$prev = fread($fd, filesize($filename));
fclose($fd);
$allm = "<post>".$_GET['_message']."</post>";
$addall = "$allm$prev";
#$gonnatrim = $addall;
#$addall = trim($gonnatrim);
$addall = stripslashes($addall);
$addall = iconv("ANSI","UTF-8",$addall);
$fn = fopen($filename, "w");
fwrite($fn, $addall);
fclose($fn);
phpinfo();
?>

Там в описании написано что надо библиотеки специальные установить...
Я бы установил, но вопрос: каким образом их в инете устанавливать? На хостинге не будет ведь работать...
:O

iNils
05.04.2007, 17:08
MINASTIS и Kikasso: Если ваше сообщение последнее в теме, то новый текст надо добавить к последнему, а не создавать новое.

Kikasso
05.04.2007, 19:29
iNils, сорри исправлюсь. IPB делает это автоматом, странно почему в VB это не предусмотрено. Ну это не обсуждается..

MINASTIS, все у вас запутано. Все придется переделывать.
1) Данные надо посылать методом sendAndLoad. И разумеется POST. Вашим методом приходит мусор даже на локальном сервере.
2) В php есть великолепная команда echo для вывода данных. Где она у вас?
3) xml может иметь только один элемент верхнего уровня. Никого не волнует, как вы храните ваши данные, но выдавать их надо корректно. Или не надо делать вид, что это xml.

Так что домашнее задание: послать строку, записать ее в файл и отправить в ответ всю страницу, одним вызовом и одним объектом LoadVars. Разумеется POST.

Данные записывать построчно - одна запись, одна строка. XML потом.

MINASTIS
05.04.2007, 21:08
Все сделал. Вроде все так. Кодировку меняет. Русский язык не воспринимает все так же =(.
Файл к сообщению приаттачил.

Kikasso
05.04.2007, 23:09
1) в php у вас:
$allm = $_GET['_message']."\n"; Замените наконец на POST.
2) во флеше у вас:
avar.sendAndLoad("guestflash.php?_message="+pole.text, avar, "POST");
То что желтое, ничто иное как передача GET'ом.
После правки №1 у меня наконец сохранилось нормально, и локально и в сетке. И у вас заработает.

ANSI нет такой кодировки, есть Windows-1251, koi8-r, utf-8 и пр.

MINASTIS
05.04.2007, 23:23
Спасибо большое! =)
Наконец заработало!