Я нашел функцию stripslashes, но я предпочел бы найти, где я добавляю больше слэшей, чем должен. Мои функции используют mysql_real_escape_string один раз для каждой переменной, и я запрашиваю базу данных, используя «insert into foo (bar, bar) values ($ baz, $ baz)», возможно, это проблема.
phpinfo дает
magic_quotes_gpc On On magic_quotes_runtime Off Off magic_quotes_sybase Off Off
static function insert($replyto,$memberid,$postid,$comment) { $message=array(); $lenmax=1000; $lenmin=5; $toolong="comment is too long."; $tooshort="comment is too short."; $notarget="replied comment is deleted"; $nomember="you are not a member"; $notpost="commented post is deleted"; switch(true) { case strlen($comment)<$lenmin: $message[]= $tooshort; break; case strlen($comment)>$lenmax: $message[]=$toolong; break; case $replyto!=NULL && !commentexists($replyto): $message[]=$notarget; break; case !memberexists($memberid): $message[]=$nomember; break; case !postexists($postid): $message[]=$nopost; break; case count($message)>0:return $message; break; } $replyto=mysql_real_escape_string($replyto); $memberid=mysql_real_escape_string($memberid); $postid=mysql_real_escape_string($postid); $comment=mysql_real_escape_string($comment); if($replyto==NULL) mysql_query("insert into fe_comment(memberid,postid,comment) values($memberid,$postid,'$comment')"); else mysql_query("insert into fe_comment(replyto,memberid,postid,comment) values($replyto,$memberid,$postid,'$comment')"); }
моя хостинговая фирма имеет magic_quotes_gpc, и у меня нет доступа к файлу php.ini. Я использую панель plesk для настройки.
Документация php
Пример использования stripslashes () – это когда включена директива PHP magic_quotes_gpc (она включена по умолчанию), и вы не вставляете эти данные в место (такое как база данных), которое требует экранирования. Например, если вы просто выводите данные прямо из HTML-формы.
Мои запросы вставки вставляются с косой чертой в базе данных, а моя версия php – 5.2.3
документация также говорит
Если magic_quotes_gpc включен, сначала примените stripslashes () к данным. Использование этой функции для данных, которые уже были экранированы, приведет к двойному удалению данных.
Поэтому я проверяю, если я дважды избегаю значений, я не могу найти нигде, я дважды избегал значений. теперь я использую
$comment=mysql_real_escape_string(stripslashes($comment));
но я думаю, что это не должно стать стандартом в моих кодах, потому что это не похоже на «правильный путь», хотя это экономит день.
magic_quotes_gpc автоматически ускользает от всех, а также не является надежным, потому что он устарел.
поэтому я создал файл .htaccess и скопировал его во все каталоги. У меня есть файл index.php, файлы .htaccess имеют только этот текст
php_flag magic_quotes_gpc Off
Я запускал phpinfo, и он все еще дает
magic_quotes_gpc On On magic_quotes_runtime Off Off magic_quotes_sybase Off Off
теперь мне нужен способ отключить магические кавычки gpc, и у меня нет доступа к файлу php.ini. Я ищу способы редактировать файлы .htaccess.