Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%
Экранирование кавычек в 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