Поиск

Поделиться с друзьями:

 

Кто сейчас на сайте

Сейчас 414 гостей онлайн

Мы платим за сообщения на форуме!

Уважаемые посетители сайта! Рады сообщить Вам о том, что на нашем форуме с 1 февраля 2011 года введена оплата за написание сообщений! 

Теперь, просто оставляя обычные комментарии на форуме Вы получаете настоящие деньги!

Каждое Ваше сообщение на форуме превращается в деньги: Монеты

Зарабатывайте на Пэйджранкере просто и с удовольствием! Вы оставляете сообщения - мы платим! Не правда ли просто?

Узнать подробнее...

Статистика сайта

Пользователи : 1
Статьи : 762
Просмотры материалов : 1386543

Авторизация



Подписка на новости

Введите ваш e-mail:

Голосования

Оцените Ваш совокупный среднемесячный доход в сети Интернет
 
Magic Quotes - дроби вместо кавычек на сайте PDF Печать E-mail
Статьи - Устранение проблем
Автор: Administrator   
12.12.2011 13:21

Magic QuotesМагические кавычки (Magic Quotes) в PHP

В данной статье PageRanker.Ru расскажет начинающим, а также тем, кто уже имеет опыт программирования на PHP, о так называемых «магических кавычках».

Эта статья посвящена версиям PHP 4 и 5. В 6-ой версии PHP magic_quotes были убраны и считаются устаревшими (deprecated).

Если у Вас на страницах сайта неверно отображаются введенные данные - кавычки заменяются многократными дробями или использование ссылок не представляется возможным, проблема вероятнее всего в использовании функции magic quotes

Что такое Magic Quotes?

Если мы посмотрим у себя в php.ini, то найдем там три директивы:
magic_quotes_qpc
magic_quotes_runtime
magic_quotes_sybase

Каждая из них может быть включена (On), либо выключена (Off).

Данные директивы отвечают за экранирование спецсимволов в различных данных поступающих в php-скрипт и выводимых из php-скрипта.

 

magic_quotes_qpc

Если директива magic_quotes_qpc включена, то экранируются спецсимволы из следующих источников: $_GET, $_POST, $_REQUEST, $_COOKIE, $_ENV (в PHP4). Кстати, на конце имени этой директивы аббревиатура GPC именно от GET/POST/COOKIE.

Например, если в одном из этих источников окажется такой элемент, как одинарная кавычка (’), двойная кавычка (”), обратный слэш (\) или NULL-символ, то этот элемент будет автоматически экранирован обратным слэшем:

index.php?test=’123′

$test = $_REQUEST['test'];

echo $test; // выведет: \’123\’

Магические кавычкиТаким образом, если мы хотим записать данные из $_REQUEST в базу MySQL например, то нам не нужно экранировать кавычки функцией addslashes, т.к. они уже будут заэкранированы. Но если magic_quotes_gpc отключена, то экранировать нужно принудительно:

index.php?test=’123′

$test = $_REQUEST['test'];

if (!get_magic_quotes_gpc()) {
$test = addslashes($test);
}

mysql_query($res, “INSERT INTO test_table (test) VALUES ($test)”);

Как видите здесь я использовал функцию get_magic_quotes_gpc для проверки состояния директивы magic_quotes_gpc. Если директива в выключенном состоянии, то я экранирую переменную $test. В противном случае экранировать нельзя, т.к. получится двойное экранирование. Т.е. если magic_quotes_gpc включена, то:

index.php?test=’123′

$test = addslashes($_REQUEST['test']);

echo $test; // выведет: \\\’123\\\’

Т.е. мы заэкранируем заэкранированное :)

Директива magic_quotes_gpc экранирует только одинарные кавычки, если включена также директива magic_quotes_sybase. Причем экранирует она одинарную кавычку одинарной кавычкой:

index.php?test=’123′

$test = $_REQUEST['test'];

echo $test; // выведет: ”123”

magic_quotes_runtime

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

magic_quotes_sybase

Эта директива в довесок к двум предыдущим, как было уже сказано, просто меняет правило экранирования одинарной кавычки и отключает экранирование остальных символов (двойной кавычки, обратного слэша и NULL-символа).

Лично я не понимаю, для чего нужно экранировать кавычку еще одной кавычкой. Но видимо это когда-то было нужно.

Как их все учитывать?

Начну с того, что директивы magic_quotes_runtime и magic_quotes_sybase можно включать/отключать прямо в PHP-скрипте:

ini_set(’magic_quotes_runtime’, 0);
ini_set(’magic_quotes_sybase’, 0);

И это я рекомендую делать всем.

Решением проблемы с отображением дробей на сайте может быть именно отключение функции magic quotes через системный файл .htaccess

А вот значение директивы magic_quotes_qpc можно установить только в php.ini, .htaccess или httpd.conf. Но зачастую хостинг-провайдер дает нам редактировать только .htaccess, да и то не всегда. Поэтому тут вывод один: нужно просто учитывать значение magic_quotes_qpc при работе скриптов, чтобы не было лишних экранирований, или наоборот, недоэкранирований :) Если эта директива выключена, то использовать addslashes над вводимыми извне данными (из указанных ранее источников).

При условии конечно, что остальные две директивы в состоянии Off.

Бывает и такое, что хостинг-провайдер блокирует функцию ini_set. В этом случае нужно проверять значения директив с помощью ini_get. И если значения нас не устраивают, то лучше обратиться в техподдержку хостинга с просьбой отключить эти директивы.

Как отключить magic quotes?

Чтобы отключить магические кавычки

  1. создай в директории файл .htaccess (обязательно начинается с точки)
  2. вставь в ного следующую строку: php_flag magic_quotes_gpc off
  3. залей на сервак

Если хостинг-провайдер разрешил использование файла .htaccess, то все должно получиться.

Чтобы проверить сработало или нет

  1. создаешь PHP-файл со строкой
  2. заливаешь на сервак, запускаешь его
  3. ищешь параметр magic_quotes_gpc, в столбце Local Value должно быть OFF

Как отключить magic quotes через .htaccess?

Если сервер Вашего веб-ресурса находится на Apache, самым простым решением проблемы с магическими кавычками будет добавление данного кода в системный файл .htaccess:


php_value magic_quotes_gpc off

Magic Quotes – это конечно устаревшие вещи, но не учитывать их опасно в нынешней ситуации, пока мир не перейдет на PHP6.

Ваш Пэйджранкер.ру


Обновлено 12.12.2011 13:50
 

Комментарии  

 
+1 # RE: Magic Quotes - дроби вместо кавычек на сайтеAdministrator 16.12.2011 12:05
На практике проверены все перечисленные способы отключения magic quotes.
Если Ваш веб-ресурс обслуживается на сервере Apache - никаких проблем не должно возникнуть.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: Magic Quotes - дроби вместо кавычек на сайтеProfi30 30.12.2011 18:58
Спасибо за интересную тему. Порой очень обидно вместо картинки или какого-то элемента видеть его адрес. Даже не столько обидно, сколько не всегда нужно показывать пользователю, что картинка взята с другого нашего же сайта.
Ответить | Ответить с цитатой | Цитировать
 

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

Уважаемый посетитель www.PageRanker.ru!
На любой вопрос, заданный Вами в комментариях к материалам сайта или на страницах форума, Вы получите ответ в течении 24 часов! Это живой сайт. Вы можете этим воспользоваться.
Перед добавлением комментариев рекомендуем Вам ознакомиться с общими правилами, регламентирующими обсуждение материалов сайта:
На сайте запрещено:
1. Оставлять в комментариях ссылки на ресурсы сети Интернет за исключением ссылок, ведущих на внутренние страницы www.PageRanker.ru и ссылок, ведущих на страницы,строго соответствующие тематике комментируемого материала.
2. Оскорблять других участников обсуждения.
3. Использовать нецензурную лексику в любых формах ее проявления, включая завуалированный мат.
4. Оставлять комментарии, не несущие никакой смысловой нагрузки (состоящие из одних смайликов, состоящие из нескольких несвязных или повторяющихся символов, таких как: ")))", "хз", "угу", "ууу", "ыыы", "хахаха" и им подобных.
5. Негативно отзываться о сайте в целом, об администрации www.PageRanker.ru и материалах, размещенных на сайте.


Защитный код
Обновить

www.PageRanker.ru Статьи Устранение проблем Magic Quotes - дроби вместо кавычек на сайте
PageRanker | Форум | Карта сайта
Новичку | Веб-мастеру | Оптимизация | Продвижение | Монетизация | Google | Яндекс | FTP и Хостинг | Устранение проблем
Продвижение сайтов | Поисковые системы | CMS Joomla 1.5.х | Горячие новости | Политика | Мир | Экономика | Общество | Происшествия | Спорт | Авто | Наука и техника | Культура
Lifestyle | Светская жизнь | Как бы новости | Фото | Видео | Читать онлайн | Фантастика | Детские книги | Юмор | Флейм | Работа форума и сайта
Никакие данные, представленные на www.pageranker.ru, не могут быть использованы без согласования с администрацией сайта. При публикации материалов ссылка на сайт www.pageranker.ru обязательна.
Любое копирование материалов без размещения открытой для индексации обратной ссылки, запрещено. Все права защищены.