Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.04.2013, 10:42
Аватар для BETEP
Новичок на форуме
Отправить личное сообщение для BETEP Посмотреть профиль Найти все сообщения от BETEP
 
Регистрация: 11.04.2013
Сообщений: 4

Как передать символ '<' на сервер?
Использую ASP.NET-jQuery-javascript.
Нужно передать блок HTML кода на сервер. Вот реализация
function SaveTemplate()
{
    //var code = $('#content').html().toString();
    var code = "<table>";
    var arr = {"SaveTemplate": code};
    $.post('ReportSheetTable.aspx', arr, SaveTemplatePostback);
}

Выдает ошибку во время выполнения последней строки.
Firebug пишет: "NetworkError: 500 Internal Server Error - http://localhost:1046/site/ReportSheetTable.aspx"
Удалось передать строку только если экранировать символ одинарными кавычками.
var code = "'<'table>";

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

Последний раз редактировалось BETEP, 11.04.2013 в 10:46.
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2013, 10:44
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var code = "\x3Ctable\x3E";
alert(code);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2013, 10:45
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

а вообще странно что он у вас его не принимает, можно попробовать еще как вариант:
var code = "&lt;table&gt;";
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2013, 11:03
Аватар для BETEP
Новичок на форуме
Отправить личное сообщение для BETEP Посмотреть профиль Найти все сообщения от BETEP
 
Регистрация: 11.04.2013
Сообщений: 4

Javascript воспринимает "\x3C" как "<"
var code = "\x3Ctable\x3E"; // в code хранится строка "<table>" и на сервер она не передается...

Вариант
var code = "&lt;table&gt;";
передается на сервер, но на ASP.NET в Request["SaveTemplate"] хранится "&lt;table&gt;", а хотелось бы "<table>".
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2013, 11:10
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от BETEP
передается на сервер, но на ASP.NET в Request["SaveTemplate"] хранится "&lt;table&gt;", а хотелось бы "<table>".
дык раскодируйте на сервере.

На клиенте кодируем:
var code = '<table>';
// кодируем
code = code
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');

alert(code); // отправляем

// на сервере раскодируем:
// думаю аналог на сервере состряпать не составит труда
code = code
            .replace(/&gt;/g, '>')
            .replace(/&lt;/g, '<')
            .replace(/&amp;/g, '&');

alert(code);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2013, 11:30
Аватар для BETEP
Новичок на форуме
Отправить личное сообщение для BETEP Посмотреть профиль Найти все сообщения от BETEP
 
Регистрация: 11.04.2013
Сообщений: 4

Спасибо.
Воспользовался только одной заменой
code.replace(/</g, '&lt;')

Т.к. все, кроме символа '<' передаются без проблем, и не хочется перегружать клиент и сервер лишними расчетами.
Серверный код на C#:
string str = Request["SaveTemplate"].Replace("&lt;", "<");
Ответить с цитированием
  #7 (permalink)  
Старый 11.04.2013, 11:37
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от BETEP
Воспользовался только одной заменой
лучше две минимум делайте, заменять символ & тоже надо, потому как текст может содержать уже такой набор:
var a = '<table attr="&lt;">';

a = a.replace(/</g, '&lt;');

alert(a);

a = a.replace(/&lt;/g, '<');

alert(a); // не совпадает с оригиналом
var a = '<table attr="&lt;">';

a = a.replace(/&/g, '&amp;').replace(/</g, '&lt;');

alert(a);

a = a.replace(/&lt;/g, '<').replace(/&amp;/g, '&');

alert(a); // все хорошо
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ребят как передать значение из php в src название изображения! SpiritDark Элементы интерфейса 4 14.05.2012 14:02
Как передать сложный массив на сервер vuler jQuery 1 27.03.2012 16:15
Как передать код html страницы из фрейма на сервер vuler Общие вопросы Javascript 5 20.02.2012 16:31
Как передать переменную в функцию с помощью JQuery??? Иван Я Events/DOM/Window 3 20.01.2012 11:21
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 02:11