Форум 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)
-   -   Загрузка с символом & (http://www.flasher.ru/forum/showthread.php?t=79121)

kvv 02.05.2006 15:40

Загрузка с символом &
 
Есть скрипт новостей. Когда юзер добавляет новость, ее текст записывается в базе, предварительно обработанный функцией htmlspecialchars (заменяет символы < и > на &lt и &gt).
А когда новость загружается во флешку, то во флешку идет примерно такой пост: sid=1&uid=1&text=sometext &lt b &gt... И, следовательно в новость записывается лишь часть текста до первой всетречи &. Как этого избежать?

silin 02.05.2006 16:39

а как грузим во флеш ?

kvv 02.05.2006 20:57

Постом через лоадварс. xml не подходит, тк весь движок придется переписывать.

etc 02.05.2006 21:08

а почему бы теги не вернуть назад?

K.A.T.A.F.A.L.K.E.R 02.05.2006 22:33

Цитата:

Сообщение от kvv
xml не подходит, тк весь движок придется переписывать.

придется переписывать.

silin 02.05.2006 22:37

>> почему бы теги не вернуть назад?
дада: LoadVars.onData дает непропарсенную строку данных от вызовов load/sendAndLoad: с ней и разбирайся..

iNils 02.05.2006 22:47

А разве надо &lt и &gt писать, а не &lt; и &gt; ?

kvv 03.05.2006 00:04

iNils да, так - но это сути не меняет
Спасибо за совет с onData, попрбую. Но так идет стандартый метод decode. А как его переписать под себя - вообще не понимаю.

По ходу возник еще вопрос - а как вообще в текстфилде с хтмлем можно отобразить символы < и >, ведь по-любому строку <smth> флешка никогда не покажет - она же обработает это или как дефолтовый тэг, или стиль... Уже столько лет пишут порталы под флеш - должны ж были как-то это придумать?

А с передачей амперсанда пока мне кажется самый реальный выход - или при передаче из скрипта его просто вырезать нафиг - кому он нужет в новостях...

iNils 03.05.2006 00:19

Цитата:

Сообщение от kvv
iNils да, так - но это сути не меняет

Ну не знаю. Сделал я тестовую флешку и передевал туда данные, правда через flashvars, но когда я добавил ";" то стало работать.

Nirth 03.05.2006 00:21

Я сталкивался с такой проблемой, но в упор не помню как решил, толи я передал номер символа в юникоде, толи написал парсер..было два года назад.

kvv 03.05.2006 00:34

Цитата:

Ну не знаю. Сделал я тестовую флешку и передевал туда данные, правда через flashvars, но когда я добавил ";" то стало работать.
Все это делает скрипт. Php-функция htmlspecialchars преобразует < в &lt;
А то, что данные отрезаются по & - это точно. У меня сначала через ондату выводится неотпарсенная строка - там все есть, а когда через онлоад - тогда обрезается.

Парсер onData написать врят-ли получится - во флешку через один объект грузятся данные для разных модулей - новостей, авторизации, и тд.
С юникодом попробую.

etc 03.05.2006 00:56

& = %26

iNils 03.05.2006 01:02

Да действительно flashvars работает по другому. Но можно так сделать
Код:

str = "p1=text&p2=sometext &lt; b &gt; bold &lt; /b &gt; next";
lv = new LoadVars ();
xml1 = new XML();
xml1.parseXML(str)
lv.decode (xml1.firstChild.nodeValue);
trace (lv.p1);
trace (lv.p2);

но точки с запятой все рано ставить надо :)

тогда общая схема такая
Код:

lv = new LoadVars ();
lv.load ("info.txt");
lv.onData = function (src) {
        var xml1 = new XML ();
        xml1.parseXML (src);
        this.decode (xml1.firstChild.nodeValue);
        this.onLoad ();
};
lv.onLoad = function () {
        trace (this.p2);
};

info.txt содержит:
p1=text&p2=sometext &lt; b &gt; bold &lt; /b &gt; next

kvv 03.05.2006 07:44

Сделал в php-скрипте перед выводом новости $text=str_replace('&','%26',$text) - и все работает, спасибо!

У iNils идея интересная, но у меня не заработала:
Код:

rec_lv.onData=function(src)
{
        _root.debugger_mc.addText('LOADED:');
        _root.debugger_mc.addText(src);
        //this.decode(src);
        var xml1 = new XML ();
        xml1.parseXML (src);
        this.decode (xml1.firstChild.nodeValue);
        this.onLoad(true);
        for(var i in this)
        {
                _root.debugger_mc.addText(i+' '+this[i]);
        }
}

Загружаем строку вида:
Цитата:

&act=news&sid=114654297587685&uid=1&priv=4&txt=<heading>Бу [!]</heading><date><a href="asfunction:_root.showInfo,vad">vad</a> / 2.05.06 11:27 / <a href="asfunction:_root.showIp,127.0.0.1">127.0.0.1</a></date>Бу!
&lt;b&gt;ggg&lt;/b&gt;
<br><date><a href="asfunction:_root.showComments,13">comments [0]</a></date>
В debugger выводит:
priv 4
uid 1
sid 114654297587685
act news
onLoad [type Function]
onData [type Function]

Наверное не работает, тк текст новости содержит теги, которые мне не надо заменять, и хмл на них сбивается.

son_of_war 03.05.2006 08:03

ну ИМХО флэш любит и понимает данные, которые приходят, пропущенные через urlencode, в этом случае никаких проблем со спецсимволами не возникает

а вообще можно сохраняя данные записывать скажем в базу через функции кодирования, например base64_encode а обратно передавать через base64_decode

iNils 03.05.2006 12:18

2 kvv: не понятно почему ты часть "<" и ">" заменяешь, а часть нет.
Если у тебя такой вид информации, то xml это лучшее что может быть. Весь код с тегами помещаешь в CDATA и не занимаешься головной болью с переводами.

kvv 03.05.2006 12:27

Теги юзеров я заменяю - незачем им, допустим делать ссылки на asfunction. Но у них есть возможность bbcodes + сама новость оформляется тегами (<heading></heading> - а в css прописано описание тега).

А с xml, может и нужно было, но уже поздно - большую часть кода уже написал.

iNils 03.05.2006 12:42

Вложений: 1
1. Ты объясни почему например <he ading> не меняешь на &lt;he ading&gt;
2. Вчера массово все тупили, кроме ETC :) Он ведь по сути предложил использовать escape последовательность. Тебе надо просто все аргументы кодировать в нее и передавать. Смотри аттач.
3. Правильную вещь никогда не поздно сделать.

etc 03.05.2006 13:20

Достаточно перевести только разделитель переменных (амперсанд) в escape-последовательность, чтобы флеш не думал, что это разделитель и правильно его декодировал...

А вообще, для таких целей лучше юзать xml с cdata и не заменять теги на подстановки...

iNils, escape-последовательность -- это из другой оперы (из оперы ускорения набора некоторых однотипных конструкций кода) =)
А escape это, по сути, urlencode.

iNils 03.05.2006 13:33

Цитата:

Сообщение от ETC
escape-последовательность -- это из другой оперы (из оперы ускорения набора некоторых однотипных конструкций кода) =)
А escape это, по сути, urlencode.

так у Мука написано :)

etc 03.05.2006 13:37

Мука не читал. И Гурского тоже...
Но вообще, иногда нужно уточнять, что подразумевают под "escape-последовательностью"

iNils 03.05.2006 13:52

из ActionScript для Flash MX
Цитата:

Функция escape() создает на основе переданной ей строки новую закодированную строку. Вместо любых символов строки, отличных от цифр и базовых латинских букв от A до Z и от a до z без акцентов, в новую строку записываются шестнадцатеричные escape-последовательности.

etc 03.05.2006 13:55

Одновременно с этим, escape-последовательность -- последовательность нажатий клавиш для вставки конструкций кода. Начинается с Esc =)
Впрочем, отошли от темы...

kvv 03.05.2006 16:16

2iNils
1. Потому что тег heading должен рабоать имеено как тег - им сам скрипт оформляет новость. А теги, которые вводят юзеры должны быть показаны просто как текст.
2. После его совета я так и сделал...
3. Время не резиновое... Зато уж если буду что-то новое делать - то тогда уже через xml.

А тема-то уже закончена. Всем спасибо, все работает.


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

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