Страницы

Поиск по вопросам

Показаны сообщения с ярлыком экранирование. Показать все сообщения
Показаны сообщения с ярлыком экранирование. Показать все сообщения

вторник, 25 февраля 2020 г.

Pdo экранирование кавычек

#php #pdo #экранирование


Нужно в базу добавлять текст с кавычками ('"`), предварительно экранируя их.
Через mysqli_real_escape_string - в базу добавляет значения, вместе с кавычками.

А через pdo->prepare() и pdo->quote() - нет.

так не работает, если в тексте будут кавычки:

$sql = "INSERT INTO news(text) VALUES('$noFilter')";
$query = $pdo->prepare($sql);
$query->execute(); 


так тоже, если будут кавычки в тексте:

$sql = "INSERT INTO news(text) VALUES('$noFilter')";
    $query = $pdo->quote($sql);


Как быть?
    


Ответы

Ответ 1



Не подставлять значения напрямую, а использовать плейсхолдеры $query = 'INSERT INTO news (text) VALUES (:text)'; $statement = $pdo->prepare($query); $statement->bindValue(':text', $text); $statement->execute();

Экранирование кавычек в JS

#javascript #экранирование


Почему так не работает?  

onMouseOut="setTimeout('alert(\"You went away from me\")', 1000);"


А так работает?

onMouseOut="setTimeout('alert(\'You went away from me\')', 1000);"

    


Ответы

Ответ 1



Потому что это html-разметка и вместо кавычек надо писать ": onMouseOut="setTimeout('alert("You went away from me")', 1000);" Но вообще, так делать не надо. Проблема именно в html-разметке. Если попытаться выполнить такое же присваивание в джаваскрипте, то первый код корректен, а второй - нет (экранируется апостроф, в строке остаётся апостроф и результат кривой - надо \\'). Но у html правила экранирования другие и обратный слеш оказывается во внутренней строке, не оказывая влияния на значение атрибута. Именно поэтому вторая строка корректна, а первая преждевременно кавычкой закрывает атрибут. PS: а имена атрибутов-событий по правилам пишутся полностью маленькими буквами. function test1() { eval("console.log('\'text\'')"); // Это текст из правильного варианта - тут такое не годится } function test2() { eval("console.log(\"'text'\")"); // Экранируются символы во внешней строке, не экранируется во внутренней } function test3() { eval("console.log('\\'text\\'')"); // Чтобы экранировать апостроф во внутренней строке надо экранировать сам обратный слеш во внешней } button { margin-bottom: .25em; }








Ответ 2



Потому что кавычки для экранирования не должны быть подобны кавычкам переменной. То есть если var variable = "", то внутри должно быть 'text', чтобы экранирование 'text' выполнялось(и наоборот). В Вашем же случае этот код будет: onMouseOut='setTimeout("alert(\"You went away from me\")", 1000);'

воскресенье, 9 февраля 2020 г.

Экранирование специалных символов для аргументов SSH команды

#unix #shell #символы #экранирование


Задача:


Переменная, содержит в конце $$

$ a='SYS_$$'

$ echo $a

SYS_$$

Тут разворачивает $$ в конце строки как номер процесса, а надо отобразить строку
"SYS_$$", передаваемую как параметр.

$ echo "echo \$1" | ssh another_host "/bin/sh -s $a"

SYS_18992


    


Ответы

Ответ 1



Попробуйте так: $ a='SYS_$$' $ echo 'echo $1' | ssh another_host "/bin/sh -s '$a'" SYS_$$ При вызове ssh, внутри двойных кавычек одиночные кавычки тетряют своё специальное назначение и переменная $а будет замещена её значением, т.е. $SYS_$$. Далее, при вызове sh на удалённом хосте, одиночные кавычки вновь приобретают своё специальное назначение и препятствуют замещению $$ текущим pid.

Ответ 2



надо передать символы одинарных кавычек вокруг аргумента, с которым вызывается программа sh. для этого надо добавить перед кавычками символы \: $ v='a$$'; echo 'echo $1' | ssh хост sh -s \'$v\' a$$

среда, 22 января 2020 г.

Как в json.dumps включить/отключить экранирование “/”?

#python_3x #json #экранирование


Не могу слеш отэкранировать при преобразовании в JSON. (Python 3.7, Linux)

Сейчас '/' нужно '\/'

Преобразую словарь в JSON

d = json.dumps(dic) - слеши в путях к файлам "/" не экранируются


пробую предварительно path = path_raw.replace('/', '\\/')

на выхлопе экран из 4(!) обратных слешей \\\\/.

Нашел интересный пакет ujson, у него есть опция отключения экранирования слеша, но
и она не работает, 
перепробовал кучу комбинаций с разными кавычками и \r'\/' и '\\/' и '\\r\/'.
    


Ответы

Ответ 1



Попробуй вот так хаком json.dumps(your_dict).replace('/', r'\/') >>> escaped = json.dumps({"path": "/home/com/part/"}).replace('/', r'\/') >>> escaped '{"path": "\\/home\\/com\\/part\\/"}' >>> first_dict = json.loads(escaped) >>> first_dict {'path': '/home/com/part/'} Вот здесь описывается подобный случай.

Ответ 2



Пришел вот к такому решению: dic = {'path': /path} listofdic.append(dic) dump_list = json.dumps(listofdic).replace('/', r'\/') str_to_write = str(dump_list) write_file(json_file, str_to_write) в файле после записи (показываю только проблемный кусок): "path": "\/complete\/search"

воскресенье, 1 декабря 2019 г.

Как вставить(экранировать) переменную в место перед точкой JS

#javascript #jquery #синтаксис #экранирование


В переменной itemNumber хранится число
Есть объекты типа cart.name1.price, cart.name2.price

Как поместить/подставить переменную на место числа? Может как-то экранировать надо?

cart.name+itemNumber+.price - ругается на точку после +
    


Ответы

Ответ 1



Для этого надо использовать скобочную нотацию cart["name"+itemNumber].price

среда, 9 января 2019 г.

Экранирование специалных символов для аргументов SSH команды

Задача:
Переменная, содержит в конце $$
$ a='SYS_$$'
$ echo $a
SYS_$$ Тут разворачивает $$ в конце строки как номер процесса, а надо отобразить строку "SYS_$$", передаваемую как параметр.
$ echo "echo \$1" | ssh another_host "/bin/sh -s $a"
SYS_18992


Ответ

Попробуйте так:
$ a='SYS_$$' $ echo 'echo $1' | ssh another_host "/bin/sh -s '$a'"
SYS_$$
При вызове ssh, внутри двойных кавычек одиночные кавычки тетряют своё специальное назначение и переменная $а будет замещена её значением, т.е. $SYS_$$ Далее, при вызове sh на удалённом хосте, одиночные кавычки вновь приобретают своё специальное назначение и препятствуют замещению $$ текущим pid.

понедельник, 8 октября 2018 г.

Как вставить(экранировать) переменную в место перед точкой JS

В переменной itemNumber хранится число Есть объекты типа cart.name1.price, cart.name2.price
Как поместить/подставить переменную на место числа? Может как-то экранировать надо?
cart.name+itemNumber+.price - ругается на точку после +


Ответ

Для этого надо использовать скобочную нотацию
cart["name"+itemNumber].price