Здравсвтуйте!
На форуме http://www.bestfree.ru/forum/ cтолкнулся со следующей проблемой: при попытке создать новый подраздел форума в админпанели мне выдалось сообщение: "Не введено название нового форума", хотя все поля были заполнены верно...
Далее оказалось, что и на самом форуме я не могу создавать или править вообще никакие сообщения. Скорее всего сбой произошел, когда хостеры переносили сайт на новый сервер...
Кто сталкивался с подобной проблемой подскажите, где можно исправить эту проблему?
Заранее благодарен!
1. TRos - 28 мая 2014 — 06:34 - перейти к сообщению
2. WebMaster - 28 мая 2014 — 10:36 - перейти к сообщению
Скорее всего опять проблема с русской локализацией
3. TRos - 28 мая 2014 — 10:38 - перейти к сообщению
И как эту проблему можно решить?
4. WebMaster - 28 мая 2014 — 10:41 - перейти к сообщению
http://exbb.info/community/topic...=6&topic=583
решалась похожая проблема
решалась похожая проблема
5. TRos - 28 мая 2014 — 10:41 - перейти к сообщению
Спасибо, сейчас посмотрю
(Добавление)
Нет... Этот топик я прочел весь еще до создания новой темы - ни один из советов мне не помог
(Добавление)
Нет... Этот топик я прочел весь еще до создания новой темы - ни один из советов мне не помог
6. WebMaster - 28 мая 2014 — 10:47 - перейти к сообщению
Тогда попробуйте другое решение:
файл include/vars.class.php
Строки:
попробуйте заменить на:
файл include/vars.class.php
Строки:
CODE:
function Clean_Key($key) {
$key = trim($key);
if ($key == '') {
return '';
}
$key = preg_replace( "/\.\./" , '' , $key );
$key = preg_replace( "/\_\_(.+?)\_\_/" , '' , $key );
$key = preg_replace( "/^([\w\.\-\_]+)$/", "$1", $key );
return $key;
}
function Clean_Value($var) {
$var = (get_magic_quotes_gpc()) ? trim(stripslashes($var)):trim($var);
$var = preg_replace("#\r#","",$var);
return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES));
}
function Clean_Key($key) {
$key = trim($key);
if ($key == '') {
return '';
}
$key = preg_replace( "/\.\./" , '' , $key );
$key = preg_replace( "/\_\_(.+?)\_\_/" , '' , $key );
$key = preg_replace( "/^([\w\.\-\_]+)$/", "$1", $key );
return $key;
}
function Clean_Value($var) {
$var = (get_magic_quotes_gpc()) ? trim(stripslashes($var)):trim($var);
$var = preg_replace("#\r#","",$var);
return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES));
}
попробуйте заменить на:
CODE:
function Clean_Key($key) {
if ($key == '') {
return '';
}
return $key;
}
function Clean_Value($var) {
return $var;
}
function Clean_Key($key) {
if ($key == '') {
return '';
}
return $key;
}
function Clean_Value($var) {
return $var;
}
7. TRos - 28 мая 2014 — 10:48 - перейти к сообщению
Спасибо еще раз Сейчас буду пробовать
(Добавление)
Огромнейшее спасибо! Все заработало Насколько я понял, изменением функции мы отключили фильтрацию символов в передаче переменных?
(Добавление)
Огромнейшее спасибо! Все заработало Насколько я понял, изменением функции мы отключили фильтрацию символов в передаче переменных?
8. WebMaster - 28 мая 2014 — 10:59 - перейти к сообщению
Цитата:
Насколько я понял, изменением функции мы отключили фильтрацию символов в передаче переменных?
Да. Только это вроде не очень безопасное решение
9. TRos - 28 мая 2014 — 11:01 - перейти к сообщению
А в чем его опасность?
10. WebMaster - 28 мая 2014 — 11:02 - перейти к сообщению
Цитата:
А в чем его опасность?
Могут передаваться нежелательные символы... Не просто так же эту защиту делали
11. TRos - 28 мая 2014 — 11:02 - перейти к сообщению
Ясно Спасибо Тему закрываем
12. 1Bot - 28 мая 2014 — 11:28 - перейти к сообщению
WebMaster пишет:
CODE:
return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES));
Скорее всего, из-за того, что сервер ожидает русские символы в кодировке utf8, нужно использовать параметр ENT_DISALLOWED в функции преобразования специальных символов в HTML-сущности (htmlspecialchars), который заменяет кодовые последовательности, несоответствующие указанному типу документа символом замены Юникода U+FFFD в случае использования UTF-8 и &#FFFD; при использовании другой кодировки.
CODE:
return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES | ENT_DISALLOWED,'cp1251'));
13. - 21 сентября 2014 — 07:30 - перейти к сообщению
Всё срабатывает, но при попытке редактирования форума не выводится название форума, описание форума, а также инфа о спонсоре, если они были введены по русски. Форум версии cp1251 также, как и у автора вопроса на сервере utf-8. В vars.class.php все менял и это помогает, русские символы он начинает признавать, но вот не выводится уже вбитое при правке форума. В чем может быть дело? Пытался сохранить
14. WebMaster - 18 июня 2016 — 09:52 - перейти к сообщению
Ещё один (гораздо более правильный) способ побороть проблему:
Открываем файл include/vars.class.php
Находим строки:
И заменяем их на:
Открываем файл include/vars.class.php
Находим строки:
CODE:
function Clean_Value($var) {
$var = (get_magic_quotes_gpc()) ? trim(stripslashes($var)):trim($var);
$var = preg_replace("#\r#","",$var);
return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES));
}
$var = (get_magic_quotes_gpc()) ? trim(stripslashes($var)):trim($var);
$var = preg_replace("#\r#","",$var);
return preg_replace("#&(\#[0-9]+;)#", "&$1", htmlspecialchars($var,ENT_QUOTES));
}
И заменяем их на:
CODE:
function Clean_Value($var) {
$var = (get_magic_quotes_gpc()) ? trim(stripslashes($var)):trim($var);
$var = preg_replace("/\r/","",$var);
return preg_replace("/&(\#[0-9]+;)/", "&$1", htmlspecialchars($var,ENT_QUOTES, 'Windows-1251'));
}
$var = (get_magic_quotes_gpc()) ? trim(stripslashes($var)):trim($var);
$var = preg_replace("/\r/","",$var);
return preg_replace("/&(\#[0-9]+;)/", "&$1", htmlspecialchars($var,ENT_QUOTES, 'Windows-1251'));
}