Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< Как в php обрезать строку || Курсы по web-программированию >>>

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

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

Здравствуйте, уважаемые читатели блога LifeExample, сегодня я бы хотел раскрыть тему экранирования кавычек в php, javascript и sql, рассказать что это такое и зачем нужно, а также привести несколько полезных примеров показывающих необходимость экранирования.

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

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

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

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

Все, что содержится между кавычек — понимается интерпретатором как строка.

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

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

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

  • "Название моего блога: "
  • " "

а между ними неизвестный ему оператор – lifeexample.ru.

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

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

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

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

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

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

Например, мы имеем строку с авторской и прямой речью, которая содержит кавычки:

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

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

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

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

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

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

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

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

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

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

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

или mysql_real_escape_string

1
2
3
4
<?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

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

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

1
echo phpinfo();

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

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

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

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

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

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

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

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

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

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

Чтобы избежать этих проблем нужно прогнать текст с переносом строк через функцию JSON.stringify()

1
text = JSON.stringify(text);

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

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

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

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

Для экранирования кавычки в sql нужно их дублировать.

1
2
вместо  ' писать ''
вместо " писать  ""

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

Убрать экранирование кавычек в php можно стандартной функцией stripslashes();

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

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

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

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Нравится

Комментарии

  • Азизжан

    Большое спасибо!

  • Галина

    Спасибо. Очень коротко и ясно.

  • Эрик

    не работает вот такая конструкция:
    +»+

    что нужно изменить, чтобы кавычки воспринимались компилятором адекватно?

  • ильдар

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

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

    Не отвечать

    Подписаться на комментарии к этой статье по RSS

    Яндекс.Метрика