Волшебные кавычки — частый вопрос для PHPer. Сегодня я случайно увидел статью вместе с руководством по PHP и ответами на нее. Здесь я сделаю простое резюме.
Короче говоря, котировки Magic будут автоматически экранировать введенные данные при включении. Среди них все одинарные кавычки ('), двойные кавычки ("), обратная косая черта и NULL-символы будут экранированы (добавляется обратная косая черта). Фактически, эта операция по сути вызывает функцию addslashes.
Зачем использовать магические кавычки
Удобно и быстро
Разработчики PHP с самого начала предполагали быстрое и удобное программирование. Например, при вставке в базу данных кавычки Magic автоматически экранируют данные, что очень удобно.
Хорошо для начинающих
Волшебные кавычки могут в определенной степени помочь новичкам избежать рисков безопасности, связанных со сценариями. Например, в коде без каких-либо мер защиты включение кавычек Magic снизит многие риски, такие как проблемы с внедрением. Конечно, использование одного только этого метода не может полностью предотвратить такие проблемы безопасности.
«У меня нет разрешения на закрытие»
Очевидно, вы можете знать об этой проблеме, но пространство хоста не находится полностью под вашим контролем.
Почему бы не использовать кавычки Magic
Переносимость Независимо от того, включена эта функция или нет, она повлияет на переносимость сценария, поскольку влияет на наши последующие операции по фильтрации данных.
Проблемы с производительностью Все внешние данные будут экранированы перед получением, что, несомненно, увеличит затраты времени выполнения (и не все данные должны быть экранированы).
Вызывает путаницу. Как упоминалось выше, не все данные необходимо экранировать. Одна из ситуаций, которая может возникнуть, — это когда вы используете «сумасшедшую» функцию Stripslashes для получения неэкранированных данных.
PHP6 больше не поддерживается
Разработчики PHP, очевидно, осознали свою «ошибку» и исключили ее из PHP6.
Как отключить котировки Magic
На мой взгляд, для глобального отключения кавычек Magic надежнее всего использовать файл конфигурации php.ini. См. код ниже
: Волшебные кавычки;; Волшебные кавычки для входящих данных GET/POST/Cookie.magic_quotes_gpc = Off; Волшебные кавычки для данных, генерируемых во время выполнения, например данных из SQL, из exec() и т. д.magic_quotes_runtime = Использовать; Волшебные кавычки в стиле Sybase (экранируйте ' с помощью '' вместо ').magic_quotes_sybase = Off Однако онлайн-хост может не разрешить вам изменять файл php.ini, поэтому вы можете использовать файл .htaccess, чтобы отключить его и добавить следующий код
php_flag Magic_quotes_gpc Off Вышеупомянутое может Для портированного кода данные должны оставаться согласованными независимо от того, отключен ли Magic_quotes. Тогда вам может помочь следующий код
: значение;}$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep' , $_REQUEST);}