Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача переменных с неэкранированными кавычами, <tag value="javascript:a('b')">c</tag> 
:(
    Опции темы
Farik
Дата 13.5.2005, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.2.2005

Репутация: нет
Всего: 1



Задачка такая - на сервере генерится контент из тимплейта, получается здоровая таблица
Таблица форматирована фигово
Код

<td>%SPECIAL_BAD_LINK%</td>
<TD bgcolor=#ffffff align=right><FONT color=#%COLOR%>%VALUE1%</td>
<TD bgcolor=#ffffff align=right><FONT color=#%COLOR%>%VALUE2%</td>
<TD bgcolor=#ffffff align=right><FONT color=#%COLOR%>%VALUE3%</td>

Когда в строчке таких ячеек 25, да плюс самих строчек - 150, обьёмчик у странички получается немаленький. Хочу собственно умешьшить за счёт вынесения общего форматирования в JScript
Код

function line(a1,a2,a3) {
 document.write("
 <TD bgcolor=#ffffff align=right><FONT color=#%COLOR%>%VALUE1%</td>
 <TD bgcolor=#ffffff align=right><FONT color=#%COLOR%>%VALUE2%</td>
 <TD bgcolor=#ffffff align=right><FONT color=#%COLOR%>%VALUE3%</td>
 ";
}

line('a','b','c');
line('e','f','g');
line('h','g','k');


Собственно затык возник в связи с тем, что некоторые переменные содержат все мыслимые кавычки и при генерации странички на сервере переменная %SPECIAL_BAD_LINK% заменяется на <a href="javascript:graph('634','1783051763',0)">graph</a> и при попытке это передать в функцию получается фигня
Код

line('<a href="javascript:graph('634','1783051763',0)">graph</a>','b','c');


Я себе представляю выход из такой ситуации только следующий, изменить старый тимплейт
Код

<td>%SPECIAL_BAD_LINK%</td>

на
Код

<div style="display:none;" id='sp_bad_code'>%SPECIAL_BAD_LINK%</div>

и в функцию вывода передавать
Код

line(escape(document.GetElementById('sp_bad_code').innerHTML),'g','k');


И вот собственно вопрос - есть ли какие либо варианты дальнейшего уменьшения размера странички, передаваемой пользователю в сложившихся обстоятельствах?
PM MAIL   Вверх
Aliance
Дата 13.5.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Farik @ 13.5.2005, 13:10)
Собственно затык возник в связи с тем, что некоторые переменные содержат все мыслимые кавычки и при генерации странички на сервере переменная %SPECIAL_BAD_LINK% заменяется на <a href="javascript:graph('634','1783051763',0)">graph</a> и при попытке это передать в функцию получается фигня

Просто используй escape-последовательности, замени все кавычки на \".

Цитата(Farik @ 13.5.2005, 13:10)
И вот собственно вопрос - есть ли какие либо варианты дальнейшего уменьшения размера странички, передаваемой пользователю в сложившихся обстоятельствах?

Дык циклом можно делать. Покажи какой код должен получить браузер?

А зачем в твоей функции аргументы? Или ты ее (функция) сократил?
PM MAIL WWW ICQ Skype   Вверх
Farik
Дата 13.5.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.2.2005

Репутация: нет
Всего: 1



так
видимо неясно обьяснил...
есть шаблон
Код

 <td id=AAA>%SPECIAL_BAD_LINK%</td>


cgi-шник на сервере возвращает страничку, сформированную по этому шаблону
Код

 <td id=AAA><a href="javascript:graph('634','1783051763',0)">graph</a></td>


и эта страничка отправляется к пользователю
так вот в связи с тем, что фактически это огромная таблица, заполненная цифрами, есть возможность сократить её размер, вынеся структуру таблицы в JavaScript, а данные передавая в виде параметров функции

Код

function line(a1,a2,a3) {    
 document.write("    
 <TD bgcolor=#ffffff align=right><FONT color=#a1>a2</td>    
 <TD bgcolor=#ffffff align=right><FONT color=#a1>a2+a3</td>    
 <TD bgcolor=#ffffff align=right><FONT color=#a1>a3</td>    
 ";    
}    
line('a','b','c');    
line('e','f','g');    
line('h','g','k');


в связи с тем, что структура - для всей таблицы одна и та же
Код

<tr><td bgcolor=red>A</td><td bgcolor=green>B</td><td bgcolor=blue>C</td>...<td bgcolor=white>Z</td></tr>
и так - 150 строчек

экономия при вынесении этой структуры в JScript, как показано выше, получается очень и очень существенной - в моём случае вместо 150кб - 20кб, из которых 5кб - кеширующийся после первого использования .js файл, то есть получается 150кб к 15кб

так вот всю эту красоту портит парочка аргументов, те сгененённая по шаблону
Код

 <tr><td>%SPECIAL_BAD_LINK%</td><td>%data%</td></tr>

страничка получается такой
Код

 <tr><td><a href="javascript:graph('634','1783051763',0)">graph</a></td><td>634</td></tr>


и при попытке передать в виде аргумента переменную <a href="javascript:graph('634','1783051763',0)">graph</a>
Код

 line('<a href="javascript:graph('634','1783051763',0)">graph</a>', '634');

получается фигня 8(

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

 line('%SPECIAL_BAD_LINK%','%data%');

обработанна корректно быть не может
Код

 line('<a href="javascript:graph('634','1783051763',0)">graph</a>','634');

потому как внутри переменной %SPECIAL_BAD_LINK% содержатся оба вида кавычек 8(

Так вот собственно и вопрос - есть ли возможность изменить шаблон так, чтобы как то использовать переменную <a href="javascript:graph('634','1783051763',0)">graph</a> в JScript коде?
PM MAIL   Вверх
Aliance
Дата 13.5.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Я ж говорю - замени там кавычки. Или escape-последовательности, или &quot;

ЗЫ: не JScript, а JavaScript коде 8))
PM MAIL WWW ICQ Skype   Вверх
Farik
Дата 31.5.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.2.2005

Репутация: нет
Всего: 1



JScript - это интерпретация JavaScript в IE
не могу я "там заменить кавычки"

есть код, возвращающий страничку, к нему я доступа не имею
Код

 $str = "<a href="javascript:graph('634','1783051763',0)">graph</a>";
 $template = '%s';
 sprintf($template, $str);


переменная $template задаётся мной, а всё остальное - нет
вопрос как раз в том, есть ли возможность изменить тимплейт так, чтобы работало то, что я описываю выше
PM MAIL   Вверх
Black
Дата 31.5.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Farik

А так:

Код

$str = "<a href=javascript:graph('634','1783051763',0)>graph</a>";
$template = '%s';
sprintf($template, $str);


????

или так:

Код

$str = "<a href='javascript:graph(634,1783051763,0)'>graph</a>";
$template = '%s';
sprintf($template, $str);


или так:

Код

$str = "<a href='javascript:graph(\'634\',\'1783051763\',0)'>graph</a>";
$template = '%s';
sprintf($template, $str);



--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Farik
Дата 1.6.2005, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.2.2005

Репутация: нет
Всего: 1



Цитата(Farik @ 31.5.2005, 18:51)
есть код, возвращающий страничку, к нему я доступа не имею


Цитата(Farik @ 31.5.2005, 18:51)
переменная $template задаётся мной, а всё остальное - нет


я могу изменить содержимое переменной $template
могу так
$template = 'ASDASDAD %s $!@#$!#@$@#';
могу так
$template = '$!@#$!#@$@# %s ASDASDAD';

изменить содержимое скрипта - не могу.
PM MAIL   Вверх
Sardar
Дата 1.6.2005, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Farik не меняя код никак, но не пойму почему нельзя подредактировать строчку кода на:
Код
sprintf($template, addslashes($str));



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Farik
Дата 1.6.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.2.2005

Репутация: нет
Всего: 1



я бы с удовольствием подредактировал, не будь эта строчка кода скомпилированным cgiшником.... 8(
у меня есть доступ только к тимплейту, который используется при генрации таблицы (то бишь при подставлении туда данных из БД)
в пхп я бы это сделал через
Код

echo <<<END
Такой синтаксис. ' и " пройдут в моей ситуации
END;

вот надеялся, что есть какой либо подобный приём жаве, да видимо нету....

М
 

Думаю стоит открыть коллекцию постов, где JS называют Jav`ой - лувр будет завидовать...


Это сообщение отредактировал(а) Aliance - 1.6.2005, 19:49
PM MAIL   Вверх
Sardar
Дата 1.6.2005, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Увы heredoc фича PHP, редко где ещё встретишь smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.