Нужно в базу добавлять текст с кавычками ('"`), предварительно экранируя их.
Через 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();
Почему так не работает?
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);'
Задача:
Переменная, содержит в конце $$
$ 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$$
Не могу слеш отэкранировать при преобразовании в 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"
В переменной itemNumber хранится число
Есть объекты типа cart.name1.price, cart.name2.price
Как поместить/подставить переменную на место числа? Может как-то экранировать надо?
cart.name+itemNumber+.price - ругается на точку после +
Ответы
Ответ 1
Для этого надо использовать скобочную нотацию
cart["name"+itemNumber].price
Задача:
Переменная, содержит в конце $$ $ 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.
В переменной itemNumber хранится число
Есть объекты типа cart.name1.price, cart.name2.price Как поместить/подставить переменную на место числа? Может как-то экранировать надо? cart.name+itemNumber+.price - ругается на точку после +
Ответ
Для этого надо использовать скобочную нотацию cart["name"+itemNumber].price