Wyłączenie magic_quotes_gpc
Otóż co możemy poradzić na kłopotliwe magic quotes gpc oraz magic quotes runtime które dodają nam w naszych danych niechciane backslashe za pomocą addslashes
magic_quotes_gpc dodaje nam backslashe w tablicach Get, Post oraz Cookie przed znakami cudzysłowów
magic_quotes_runtime tak samo jak wyżej, ale dodaje backslashe w danych z zewnętrznych źródeł (baza mysql, otwierane pliki)
Za pomocą konfiguracji php
Niestety ten sposób zadziała tylko jeśli możemy konfigurować interpreter php za pomocą plików php.ini, co rzadko jest dostępne na hostingach ale można spróbować stworzyć taki plik w katalogu głównym domeny
Więc modyfikujemy dwa wpisy aby miały wartość Off
magic_quotes_gpc = Off magic_quotes_runtime = Off |
Za pomocą pliku .htaccess
Pamiętaj wszystkie podkatalogi dziedziczą ustawienia pliku .htaccess
Niestety ale i to może nie zadziałać. Otwieramy plik .htaccess w głównym katalogu domeny (jeśli nie istnieje należy go utworzyć) i dodajemy w nim takie linijki:
php_flag magic_quotes_gpc off php_flag magic_quotes_runtime off |
Konfiguracja w skrypcie php
Możemy spróbować także wyłączyć te dwie funkcje bezpośrednio w skrypcie php za pomocą tych dwóch linijek:
ini_set('magic_quotes_runtime', 'Off'); |
Niestety ini_set(‘magic_quotes_gpc’, ‘Off’); dyrektywa magic_quotes_gpc jest typu PHP_INI_PERDIR i nie da się jej zmienić za pomocą ini_set();
W przypadku niemożności wyłączenia
W przypadku gdy nie możemy tego wyłączyć to możemy skontaktować się z adminem lub na początku skryptu dodać taki mały skrypcik który oczyści nasze dane za pomocą stripslashes (niestety dane z plików i baz mysql musimy ręcznie czyścić poprzez stripslashes)
if (get_magic_quotes_gpc ()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_POST = (isset($_POST) && !empty($_POST)) ? array_map('stripslashes_deep', $_POST) : array(); $_GET = (isset($_GET) && !empty($_GET)) ? array_map('stripslashes_deep', $_GET) : array(); $_COOKIE = (isset($_COOKIE) && !empty($_COOKIE)) ? array_map('stripslashes_deep', $_COOKIE) : array(); $_REQUEST = (isset($_REQUEST) && !empty($_REQUEST)) ? array_map('stripslashes_deep', $_REQUEST) : array(); } |
Który sprawdzi czy magic_quotes_gpc jest włączone i w razie potrzeby oczyści nam jedną z tablic $_COOKIE, $_GET lub $_POST
Aktualny stan magic quotes gpc oraz magic quotes runtime można sprawdzać odpowiednio za pomocą:
get_magic_quotes_gpc() get_magic_quotes_runtime() |
Obydwie funkcje zwracają 1 (true) jeśli opcja jest włączona lub 0 (false) gdy jest wyłączona.
05.11.2009 at 17:47
A co w przypadku gdy tablica $_POST jest wielowymiarowa, wtedy wywali error bo do array nie będzie mogło zrobić stripslashes
19.06.2011 at 16:22
Wtedy skorzystaj ze skryptu na samym dole, usuwa backslashe w tablicach wielowymiarowych.
15.12.2012 at 11:48
Witam,mam taki proble, i nie wiem czy to przypadkiem nie chodzi o magic_quotes_gpc. A dokladnie:
Przygotowywalem strone na serwerze w d2, i po przecuceniu na serwer klienta mam problem z jedna rzecza a mianowicie:
w CKEditor wklejam gotowy kod, przygotowany z innej strony (tak sobie zazyczyl klient) i problem jest z apostrofami:
jesli sa apostrofy, to oferta sie nie dodaje, tak jak tutaj
Cytat
style=”font-family: ‘Jakas Czcionka’;
jesli natomiast wyrzuce te apostrofy to juz jest wszystko ok.
Moj klient nie chce niczego zmieniac w wklejonym kodzie i to jest jeszcze jedyny problem.
Myslalem ze na moim serwerze jest wlaczona opcja
Cytat
ini_set(‘magic_quotes_gpc’, ‘On’);
ale tez to nic nie daje,
Prosze o pomoc co moze byc innego w wersji php, badz tez ustawieniach, ze z apostrofami u mnie wszystko dziala natomiast na serwerze klienta pojawia sie blad.
28.12.2012 at 11:53
Jak chcesz wyłączyć to zmień na off.
Kopiowanie sformatowanego tekstu to nie jest najlepszy pomysł. Lepiej skopiować czysty tekst i dopiero potem sformatować go w tamtym edytorze.