• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как победить кавычки "?

  • Автор темы Sandro
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sandro

Делаю небольшую выборку
Код:
Set coll=db.Search(|Form="f_pr_act" & fld_filial="|+filial+|" & fld_client="|+client+|"|,Nothing,32000)

Но некоторые клиенты содержат в названии " -типа ООО "РОГА и КОПЫТА"

Вываливается ошибка
я меняю кавычки в названии
Код:
client=Replace( client , |"|, |\"|)

Он вставляет в поиск \, что то с утра туплю не могу понять почему, а надо быстро исправить
 
S

Sandro

:) Мне их не надо убирать ))) Это выборка нужна для проверки , что дока с нужным клиентом нет в базе, тогда сохраняем
 
D

Darker

Ну тогды так:
client=Replace( client , |"|, "")
Set coll=db.Search(|Form="f_pr_act" & fld_filial="|+filial+|" & @replace(fld_client;"\"";"")="|+client+|"|,Nothing,32000)

Т.е приводим все к одному "безкавычковому" виду
 
O

Omh

Ну или в качестве ограничителя сторки использовать символы {}
Код:
Set Dc = Db.Search({Name = "ROGA & KOPITA"}, Nothing, 0)
 
T

TIA

Он вставляет в поиск \, что то с утра туплю не могу понять почему, а надо быстро исправить
Дык а что не правильно то? Кавычка внутри строковой константы экранируется слешем в языке @-формул.
При поисковую строку типа такой:
Set coll=db.Search(|Form="f_pr_act" & fld_filial="Филиал \"Хвост\"" & fld_client="ООО \"Рога и копыта\""|,Nothing,32000)
 
D

Darker

TIA
согласен, тогда легче заменить " на \", а формулу поиска не менять
client=Replace( client , |"|, |\"|)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
Замена кавычек, как по моему, - плохое решение, т.к., кроме того, что это дополнительное действие (без которого можно обойтись), ещё и приходится приводить к "одному знаменателю" как правую, так и левую части - чтобы Search давал правильные результаты (см. ниже как у меня в формуле сделан Uppercase; такие преобразования я стараюсь делать в крайнем случае).

Лучше всего делать как сказал выше Omh... т.к. читабельность формул с кракозябрами типа \" сильно усложняется.

Я вообще пошёл по пути неиспользования кавычек (") в формулах, т.к. они могут быть внутри используемого текста. Да и вообще давно уже не пишу формулы вручную (считаю это дурным тоном), их за меня составляет скрипт, вот например:

Код:
(Form={Dep}:{StatePosition}) & (Hierarcy[1]={ООО "РОГА и КОПЫТА"}) & (@Uppercase(Server)={CN=MY/O=DOMAIN} | Server={})
:) Мне их не надо убирать ))) Это выборка нужна для проверки , что дока с нужным клиентом нет в базе, тогда сохраняем
Ничего не надо убирать. Лучше потратьте время на написание общего механизма проверки уникальности по Db.Search, который может использовать базовый механизм сборки формул.
 
O

Omh

Я для строк тоже стараюсь использовать {} - если строка составная, удобно смотреть где конец, где начало кусочка строки.
 
S

Sandro

TIA
согласен, тогда легче заменить " на \", а формулу поиска не менять
client=Replace( client , |"|, |\"|)
Я так по логике и делал, не получилось, до сих пор не понял почему Выводил в MessageBox, он не экранирует кавычки, а ставит символ \

А когда экранировал в формуле @replace(fld_client;"\"";"") , всё нормально
 
N

nvyush

Я так по логике и делал, не получилось, до сих пор не понял почему Выводил в MessageBox, он не экранирует кавычки, а ставит символ \

А когда экранировал в формуле @replace(fld_client;"\"";"") , всё нормально
Кавычки экранируются \ в @-формулах, MessageBox выводит их как есть, т.е. для него {\"} это два символа {\} и {"}.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!