Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
В общем, как оказалось, javascript удаляет из строки спец. символы вроде косой черты и т.д.
В обще-то, это касается и JSON, т.к. Delphi код передает с помощью JSON данные во JS-фреймворк. Может в Delphi уже есть что-то готовое, т.к. работа с JSON в Delphi уже давно есть.
22 июл 20, 14:02    [22171691]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1903
1 JS, наверное, ничего не удаляет
2 наверное, вопрос стоит не в конвертировании, а в форматировании данных как строки исходного кода JS или строки JSON
22 июл 20, 14:06    [22171698]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
я просто передаю виндовый путь а в браузере он отображается без слешей
22 июл 20, 14:15    [22171710]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1143
X11,

обратный слэш в javascript используется для "экранирования". Чтобы записать в строке сам обратный слэш, надо перед ним поставить еще один такой. Как в паскале, чтобы одинарную кавычку в строку вставить, тоже две нужно написать.
https://learn.javascript.ru/string

Сообщение было отредактировано: 22 июл 20, 14:21
22 июл 20, 14:21    [22171714]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
Я это знаю и читал.
Я понимаю, что могу написать свой лисапет для всех специальных HTML/JS-символов.

НО
X11
Может в Delphi уже есть что-то готовое
22 июл 20, 14:23    [22171715]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1143
X11,

не знаю, какая у тебя задача, какие именно символы и куда тебе нужно передавать, но в Дельфи есть вот такое:
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.RegularExpressions.TRegEx.Escape
А в JavaScript есть свои функции/методы для обработки строк, можно ими обрабатывать входящую из Дельфи строку, если скрипт свой.

Сообщение было отредактировано: 22 июл 20, 14:53
22 июл 20, 14:55    [22171737]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1143
Но для пути
X11
я просто передаю виндовый путь а в браузере он отображается без слешей

наверное достаточно
s := StringReplace(s, '\', '\\', [rfReplaceAll]);
22 июл 20, 15:06    [22171748]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
Так дело ж не только в разделителе пути. Он же не единственный спец. символ.
22 июл 20, 15:16    [22171758]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
SOFT FOR YOU
Member

Откуда:
Сообщений: 2903
Есть же стандартный парсер JSON в Delphi
22 июл 20, 15:17    [22171759]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
Мне не нужно парсить джейсон. Нужно конвертировать строку.

Ок, если там есть такая функция, то как она называется, не подскажите?

А дело может быть и не в JSON, и не в JS, а в HTML, потому что строка в конченом итоге выводится в какой-то визуальный HTML-компонент. Может быть из-за HTML проблема.
22 июл 20, 15:21    [22171762]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11971
X11
я просто передаю виндовый путь а в браузере он отображается без слешей
Давай код.

1. Что передаешь?
2. Как передаешь?
3. Как отображаешь?

Потому что все должно работать и так
22 июл 20, 15:25    [22171767]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 344
Вообще в спеках JSON escape прямо прописан. Если данные корежатся после передачи - значит, энкодер кривой.

Как всегда, решение задачи методом декомпозиции. На каждом этапе "кодировка - передача - прием - раскодировка - отображение" добавить диагностику и смотреть, что за данные идут. Только смотреть средствами без неявных "обработок" спецсимволов, лучше всего в hex редакторе.

Сообщение было отредактировано: 22 июл 20, 15:37
22 июл 20, 15:37    [22171786]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
_Vasilisk_
Давай код.


ок, вот код (для UniGUI)

procedure PhotoInfoShow(UnimImage: TUnimImage);
var
  ImgSize: TImgSize;
  txt: string;
begin
  ImgSize.w := UnimImage.Picture.Width;
  ImgSize.h := UnimImage.Picture.Height;
  ImgSize.s := GetFileSize(UnimImage.Hint);

  txt := UnimImage.Hint + constHTMLTagBr +
         ExtractFileName(UnimImage.Hint) + constHTMLTagBr +
         ImgSize.w.ToString + 'x' + ImgSize.h.ToString + constHTMLTagBr +
         FloatToStrF(ImgSize.s / 1024, ffFixed, 8, 2) + ' Kb';


  UnimImage.JSInterface.JSCode(
  '    var sender='#1 + ';' +
  '    if (!sender.htmlTextEl) {' +
  '        sender.htmlTextEl = Ext.DomHelper.append(sender.element.select(''.x-innerhtml'').elements[0], {' +
  '            tag: ''div'',' +
  '            style: ''position:absolute; top:0; width:100%; height:auto; padding:10px; background:rgba(0, 0, 0, 0.3); font-weight:bold; color:white;'',' +
  '            id: sender.id + ''_textEl'',' +
  '            html: sender.htmlText' +
  '        });' +
  '    }' +
  '    sender.htmlTextEl.innerHTML = ' + QuotedStr(txt) + ';');

  UnimImage.Tag := 1;
end;


Проблема может быть в "htmlTextEl"
22 июл 20, 15:45    [22171796]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
rgreat
Member

Откуда:
Сообщений: 6058
Uses System.NetEncoding;

THTMLEncoding.HTML.Encode()
22 июл 20, 15:52    [22171808]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
rgreat, не помогло

txt := THTMLEncoding.HTML.Encode(txt);
22 июл 20, 15:56    [22171816]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11971
X11
'    sender.htmlTextEl.innerHTML = ' + QuotedStr(txt) + ';');
Так работать точно не будет.
1. Бекслеши нужно экранировать.
2. Апострофы нужно экранировать, а не удваивать, как это делает QuotedStr
3. Будем считать, что перевода строки txt не содержит

И ты не ответил еще на два вопроса: что передаешь и что отбражается?

Сообщение было отредактировано: 22 июл 20, 15:59
22 июл 20, 16:00    [22171819]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1143
X11,

ну всё правильно, javascript формирует innerHTML какого-то элемента html (htmlTextEl). В переменной txt есть незаэкранированные обратные слэши из UnimImage.Hint. Там, судя по
ExtractFileName(UnimImage.Hint)
- полное имя файла с путём. Эти незаэкранированные слэши не отображаются.
Но разве ещё какие-то спецсимволы в строке txt могут встретиться?

Или это один случай и есть еще другие такого типа, где передается строка из Delphi и могут встретиться спецсимволы и нужно общее решение?
22 июл 20, 16:01    [22171820]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
_Vasilisk_, так я об этом и говорю с самого первого поста
22 июл 20, 16:01    [22171821]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
s62
Но разве ещё какие-то спецсимволы в строке txt могут встретиться?


пока только символ виндового пути, а что будет в будущем, я не знаю

есть картинка и нужно отобразить о ней всякую инфу: путь, имя, размер. Может быть в будущем ещё что-то из Exif.

Поэтому сейчас пытаюсь решить будущую проблему, чтобы потом не морочиться
22 июл 20, 16:03    [22171824]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
В общем так:
Uses  ExtPascalUtils;
...
...
...

txt := StrToJS(txt);


Сообщение было отредактировано: 22 июл 20, 16:29
22 июл 20, 16:31    [22171843]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1903
txt := UnimImage.Hint + constHTMLTagBr +
         ExtractFileName(UnimImage.Hint) + constHTMLTagBr +
         ImgSize.w.ToString + 'x' + ImgSize.h.ToString + constHTMLTagBr +
         FloatToStrF(ImgSize.s / 1024, ffFixed, 8, 2) + ' Kb';


  UnimImage.JSInterface.JSCode(
  '    var sender='#1 + ';' +
  '    if (!sender.htmlTextEl) {' +
  '        sender.htmlTextEl = Ext.DomHelper.append(sender.element.select(''.x-innerhtml'').elements[0], {' +
  '            tag: ''div'',' +
  '            style: ''position:absolute; top:0; width:100%; height:auto; padding:10px; background:rgba(0, 0, 0, 0.3); font-weight:bold; color:white;'',' +
  '            id: sender.id + ''_textEl'',' +
  '            html: sender.htmlText' +
  '        });' +
  '    }' +
  '    sender.htmlTextEl.innerHTML = ' + QuotedStr(txt) + ';');

нах так жить
22 июл 20, 23:36    [22172037]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
Дегтярев Евгений,

не понял...
23 июл 20, 08:16    [22172087]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1492
X11,

Для собирания js кода в дельфи точно ничего нет готового. Заменяй бекслеш на два бекслеша.
24 июл 20, 06:25    [22172863]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14302
crutchmaster,

я уже решил проблему - в uniGUI есть
22171843
24 июл 20, 08:24    [22172883]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование delphi string в javascript string  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1492
X11,

Это что, специально для extJs модуль?? ._О
24 июл 20, 09:27    [22172905]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить