Как экранировать кавычки в php
Перейти к содержимому

Как экранировать кавычки в php

  • автор:

Экранирование кавычек (htmlspecialchars)

Здравствуйте! Хочу задать заезженный вопрос касаемый экранирования спецсимволов. При добавлении в базу применяю функцию htmlspecialchars(). При выводе в Текст текст «текст» , кавычки отображаются нормально, а вот в meta title Текст текст "текст" . Как сделать чтобы кавычки в TITLE отображались нормально и как грамотно реализовать данную задачу?

Отслеживать
задан 20 мар 2014 в 23:43
308 1 1 золотой знак 5 5 серебряных знаков 20 20 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

htmlspecialchars() нужно выполнять не при добавлении в базу, а непосредственно при выводе на страницу (при подстановке в HTML-шаблон). При добавлении в базу данных нужно использовать функцию экранирования кавычек, которая перед кавычками добавляет обратный слэш («\»). Это может делать, например, mysqli_escape_string() . Экранирование кавычек при добавлении в БД нужно только для корректного сохранения, при сохранении бэкслэши уберутся и в базе будет храниться исходный вариант (без бэкслэшей). В базе данных желательно хранить текстовые значения в оригинальном виде. Если хранить их заранее обработанные htmlspecialchars() , то могут возникнуть трудности с поиском и выводом этих записей не в HTML (например, в JSON или в консоль). Поэтому при сохранении в базу текстовой строки (при подстановке её в SQL-запрос) используешь mysqli_escape_string() (на крайняк addslashes() ). При выводе в HTML оборачиваешь переменную с текстовым значением в htmlspecialchars() . Причём, в htmlspecialchars() надо оборачивать любые текстовые строки, которые не являются HTML-форматированными, вне зависимости берутся они из базы или нет.

Отслеживать
ответ дан 21 мар 2014 в 4:28
105 1 1 серебряный знак 9 9 бронзовых знаков

  • php
  • htmlspecialchars
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

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

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

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

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

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

var text = «Название моего блога компании — lifeexample » ;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$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 = «

\» example \» style= \» color:green \» >Блок с зеленым текстом

» ;

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

var html = ‘

Блок с зеленым текстом

‘ ;

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

var html = ‘

\
Блок с зеленым текстом \

‘ ;

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

Довольно редко, но можно столкнуться с задачей передать 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 и показать в каких случаях необходимо применять экранирование. Надеюсь, статья оказалась полезной. Подписывайтесь на рассылку, ставьте лайки, добавляйтесь в друзья ��

Читайте также похожие статьи:

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

PHP: Кавычки

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

Что такое строка

Любой одиночный символ в кавычках — это строка. Например:

'Hello' 'Goodbye' 'G' ' ' '' 

Пустая строка » — это тоже строка. То есть строкой мы считаем все, что находится внутри кавычек, даже если это пробел, один символ или вообще отсутствие символов.

Ранее в уроках мы записывали строки в одинарных кавычках, но можно использовать и двойные:

Разберем, почему у обозначения строки есть два способа.

Зачем нужны двойные кавычки

Представим, что нам нужно напечатать строчку dragon’s mother . Апостроф перед буквой s — это такой же символ, как одинарная кавычка. Попробуем:

Такая программа не будет работать. С точки зрения PHP строчка началась с одинарной кавычки, а потом закончилась после буквы n. Дальше были символы s mother без кавычек — значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: ‘); . Этот код синтаксически некорректен.

Здесь помогут двойные кавычки. Такой вариант программы отработает корректно:

Теперь интерпретатор знает, что строка началась с двойной кавычки, значит, завершиться должна на двойной кавычке. А одинарная кавычка внутри стала частью строки.

Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки неважно.

Теперь представим, что мы хотим создать такую строку:

Dragon's mother said "No" 

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

Для этого экранируют специальные символы. В нашем случае это символ, который является признаком конца и начала строки, — либо одинарная кавычка, либо двойная, в зависимости от ситуации. Для экранирования используется обратный слеш \ .

 Dragon's mother said "No" 

Нам нужно было добавить \ для двойных кавычек, но не для апострофа, потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками.

 Death is \so terribly final 

Также нам может понадобиться вывести сам обратный слеш:

Это тоже можно сделать через экранирование, но уже самого себя.

Задание

Напишите программу, которая выведет на экран:

"Khal Drogo's favorite word is "athjahakar"" 

Программа должна вывести на экран эту фразу в точности. Обратите внимание на кавычки в начале и в конце фразы:

"Khal Drogo's favorite word is "athjahakar""

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

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

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Как экранировать кавычки в php

Чтобы использовать метод POST атрибуту method тега form присваиваается значение “post”. При нажатии кнопки “Enter”, браузер производит следующие действия: 1) Просматривает входящие в форму элементы и формирует из их атрибутов name и value данные формы. Допустим, введено имя Alex. В этом случае данные формы – name=Alex&okbutton=Enter.
2) Устанавливает соединение с сервером, отправляет на сервер запрос документа, указанного в атрибуте action (page1_1.php) тэга , используя метод отправки данных, указанный в атрибуте method (в данном случае – POST), передавая в запросе данные формы.
3) Сервер анализирует полученный запрос, формирует ответ, отправляет его браузеру и закрывает соединение.
4) Браузер отображает полученный от сервера документ.

PHP автоматически заполняет массив $_POST:

$_POST['name'] = 'Alex' $_POST['okbutton'] = 'Enter'

Именно к элементу $_POST[‘name’] идет обращение в файле page1_1.php

Ваше имя: Alex

Метод GET

Изменим значение атрибута method тега form на “get” (хотя метод GET используется по умолчанию). PHP с GET-формами поступает аналогично – заполняет массив $_GET.

В этот раз браузер отправляет GET-запрос, который равносилен вводу в адресной строке адреса:

http://адрес-сайта/page1_1.php?name=Alex&okbutton=Enter

Результат аналогичен.

magic_quotes_gpc и stripslashes

magic_quotes_gpc boolean («магические кавычки») – это функция установки magic_quotes для GPC(Get / Post / Cookie?) операций. Когда magic_quotes включены (on), все ‘(одиночные кавычки), «(двойные), \(слэши) и пустоты экранируются бэкслэшами автоматически. get_magic_quotes_gpc() получает текущую активную установку конфигурации «магических кавычек» gpc.

stripslashes – удаляет экранирование символов.

Рассмотрим пример применения этих функций.

Оставим файл form.php (см. выше методы GET и POST) изменений. Файл page1_1.php прийдется изменить следующим образом:

get_magic_quotes_gpc() подключен
Если использовать stripslashes(): your name ".stripslashes($u_name)."
"; > // $u_name = $_POST['name']; echo "Если не использовать stripslashes(): your name ".($u_name)."
"; ?>

Если ввести в форму имя D’Artanian, то в итоге получим такие результаты, в комментариях не нуждающиеся:

get_magic_quotes_gpc() подключен Если использовать stripslashes(): your name D'Artanian Если не использовать stripslashes(): your name D\'Artanian

Массив $_REQUEST

Массив $_REQUEST объединяет в себе три массива ($_GET, $_POST и $_COOKIE). Поэтому для создания программ в не зависимости от метода передачи данных, полезно использовать именно его: к примеру, $u_name = $_POST[‘name’] можно заменить на $u_name = $_REQUEST[‘name’].

Бывают случаи, когда требуется разделить методы приема, но тогда Вы сами решите для себя какой массив использовать $_GET[. ] или $_POST[. ].

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *