Экранирование кавычек в php, javascript и sql

Опубликовано: 15 Июн 2016

Что такое экранирование кавычек

Чтобы дать определение этому понятию, для начала приведу небольшой пример объявления строки. Практически в любом языке программирования мы используем следующий принцип объявления строковой переменной:

var text = "Название моего блога компании - Название ";

Все, что содержится между кавычек – понимается интерпретатором как строка.
Если нам нужно передать в строковую переменную текст содержащий кавычки и мы попытаемся сделать это таким образом:

var text = "Название моего блога: "Название" " ;

то произойдет ошибка, поскольку вместо одной строки интерпретатор увидит две:

"Название моего блога: "
" "
а между ними неизвестный ему оператор – Название.

Чтобы такого не происходило необходимо экранировать кавычки. В javascript, например, это будет выглядеть таким образом:

var text = "Название моего блога: \"Название\" " ;

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

Экранирование кавычек – это действие, совершаемое над строковой переменной в ходе работы скрипта. Действие это позволяет использовать кавычки в строке. Частным но довольно распространенным способом экранирования является подстановка обратного слеша \ перед внутренними кавычками.

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

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

"Как же вы поживаете?" – спросила Екатерина Ивановна. "Ничего, живем понемножечку", – ответил Старцев (Чехов)

Чтобы вывести ее на страницу, в PHP следует делать одним из следующих способов.

Экранирование обратным слешем:

echo  "\"Как же вы поживаете? \" – спросила Екатерина Ивановна. \"Ничего, живем понемножечку\", – ответил Старцев (Чехов)";

Экранирование одинарными кавычками

echo  '"Как же вы поживаете?" – спросила Екатерина Ивановна. "Ничего, живем понемножечку", – ответил Старцев (Чехов)';

В случае, когда внутренних кавычек в строке много проще при объявлении строки использовать одинарные кавычки, а внутри нее двойные. Либо, наоборот, в зависимости от наличия в тексте тех или иных кавычек.

Зачем может понадобиться экранирование кавычек в PHP

Помимо разобранного примера с выводом строк, экранирование кавычек и других спец символов зачастую необходимо при работе с БД.
Чтобы не допустить, различного рода проблем при работе с базой данных, перед сохранением данных в таблицы можно использовать функцию addslashes

$str = "Is your name O'reilly?";
// выводит: Is your name O\'reilly?
echo addslashes($str);

или

mysql_real_escape_string
<?php
$item = "Zak's and Derick's Laptop";
$escaped_item = mysql_real_escape_string($item); \\Escaped string: Zak\'s and Derick\'s Laptop
?>

Обе эти функции являются стандартными в php и экранируют спецсимволы строк. Когда и какую использовать, зависит от конкретных задач. Например addslashes лучше использовать для сериализованной строки при записи ее в базу, а mysql_real_escape_string для всех пользовательских данных пришедших с формы на сайте.
В небольших web-приложениях, можно не использовать ручное экранирование addslashes или mysql_real_escape_string если включить "Магические кавычки" – magic_quotes_gpc

if (!get_magic_quotes_gpc()) {
    ini_set(’magic_quotes_gpc’, ‘on’);
}

Зачастую магические кавычки включены по умолчанию на сервере, это можно узнать из информацией полученной при выполнении функции

echo phpinfo();

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

Очень часто, особенно в javascript приходится работать со строками, содержащими HTML разметку.
В javascript экранирование кавычек происходит аналогичным образом, либо обратным слешем, либо использованием разного типа кавычек.

Пример с обратным слешем:

var html = "<div class=\"example\" style=\"color:green\">Блок с зеленым текстом</div>";

Пример с внутренними кавычками:

var html = '<div class="example" style="color:green">Блок с зеленым текстом</div>';

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

var html = '<div class="example" style="color:green">\
     Блок с зеленым текстом\
</div>';

Если в данном примере не использовать обратный слеш перед переносом строки, то скрипт работать не будет.
Довольно редко, но можно столкнуться с задачей передать HTML разметку в сериализованной строке формата JSON. Если строка содержит символы переноса, то формат JSON будет нарушен.
Чтобы избежать этих проблем нужно прогнать текст с переносом строк через функцию

JSON.stringify()
text = JSON.stringify(text);

JSON.stringify() – доступна только после подключения библиотеки jquery.

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

В sql экранирование кавычек помимо разобранных нами в php и js способов – обратного слеша и внутренних кавычек, имеет еще одно решение.

SELECT  "Is your name O''reilly?";

Для экранирования кавычки в sql нужно их дублировать.
вместо  ' писать ''
вместо " писать  ""

Убрать экранирование кавычек

Убрать экранирование кавычек в php можно стандартной функцией stripslashes();
В javascript не существует аналога stripslashes, но ведь мы всегда можем воспользоваться регулярным выражением, которое поможет нам убрать экранирование кавычек в javascript

str.replace(/\0/g, '0').replace(/\\(.)/g, "$1")

В данной статье я постаралась раскрыть тему экранирования кавычек в php, js, mysql и показать в каких случаях необходимо применять экранирование. Надеюсь, статья оказалась полезной.

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: