Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Русский текст из xml, формата win1251, не отображает (http://www.flasher.ru/forum/showthread.php?t=93977)

MINASTIS 02.04.2007 07:51

Русский текст из xml, формата win1251, не отображает
 
Приветстсвую. Я много в поиске читал, и в Чаво посмотрел.. Кроме 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

Цитата:

Сообщение от MINASTIS
"даже если поставить 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 и проверь без фикса.


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

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