Перейти к содержанию
Unikal

Проблема с htmlspecialchars()

Рекомендуемые сообщения

Версия магазина 0.1.4 (обновленная с 0.1.3 путем копирования измененных файлов)В журнале ошибок в админке появляются следующие замечания:

2010-11-08 15:45:27 - PHP Notice: Undefined index: firstname in /home/u/****/****/public_html/catalog/controller/checkout/address.php on line 3132010-11-08 15:45:27 - PHP Notice: Undefined index: lastname in /home/u/****/****/public_html/catalog/controller/checkout/address.php on line 3172010-11-08 15:45:27 - PHP Notice: Undefined index: address_1 in /home/u/****/****/public_html/catalog/controller/checkout/address.php on line 3212010-11-08 15:45:27 - PHP Notice: Undefined index: city in /home/u/****/****/public_html/catalog/controller/checkout/address.php on line 3252010-11-08 15:45:27 - PHP Notice: Undefined index: country_id in /home/u/****/****/public_html/catalog/controller/checkout/address.php on line 3312010-11-08 15:45:27 - PHP Notice: Undefined index: zone_id in /home/u/****/****/public_html/catalog/controller/checkout/address.php on line 3432010-11-09 15:10:26 - PHP Notice: Undefined index: default in /home/u/****/****/public_html/admin/view/template/sale/customer_form.tpl on line 1682010-11-15 12:06:43 - PHP Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/u/****/****/public_html/system/library/request.php on line 31

Насколько это критично, о чем говорят эти предупреждения и как их пофиксить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все кроме последней строчки. Не критичные. А вот с последней давай разбираться. Изменений вносил? phpinfo() покажи?При какой операции возникает такая ошибка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глобальных изменений никаких не вносил. Из дополнительных модулей установлен только импорт/експорт последняя версия с импортного сайта.phpinfo сейчас отправлю в ссылку в личкуКогда возникает ошибка пока не смог отследить сейчас почистил журнал ошибок ппробую отловить операцию при которой возникает ошибка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С пхп все гуд. ЛОви момент когда возникает. Без этого не могу понять в чем проблема может быть :cry:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PHP Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/u/****/****/public_html/system/library/request.php on line 31

Не мог поймать из-за чего появляется но в журнале периодически возникали такие записи причем пачками, а сейчас ковыряюсь в магазине и она всплыла не только в журнале а висит вверху сайта причем что на фронте что в админке в ообщем куда бы не зашел. Что это может быть вообще. Может ли вызывать такую ошибку обращение яндекс маркета в yml файйлу? или другие обращения поисковиков к xml карте сайта. Других даже и мыслей нет ни каких по этому поводу на сайте вообще ничего глобально не менял и особо не ковырял. И еще в админке исчезло окно со статистикой.

Странно ошибка видна только в Firefox, зашел на сайт через оперу варнинга нету вверху страницы вообще чудеса.

И еще прикол у сайта есть зеркало (http://nanoproduction.net так вот захожу на основной сайт через мозилу ошибка есть захожу на зеркало ошибки нету, но все ссылке на странице закешированы и ведут на основной сайт перехожу по любой ссылки попадаю на основной сайт там ворнинг. Может быть дело в зеркале и в механизме кеширования?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня открылись оба сайта без ошибок. FF последний

единственное, наложение какое-то у тебя

Изображение

вот при выделении

Изображение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая-то проблема с кукисами или сессиями почистил в фаерфоксе все кукисы для сессии, для пути и для домена через веб девелопер для фаерфокса ошибка перестала возникать временно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу наложения это у тебя почему-то не подгрузился флеш банер сверху поэтому и произошло наложения я тестил в разных браузерах с внешним видом вроде везде нормально.

У меня стоит adblock ))) он режет рекламу, так что твой сайт будет не у всех одинаково видиться, так как могут стоят и "другие резчики". Учти на будущее это :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И если вдруг не знали, напомню, что эдблок режет картинки и флэш, если они начинаются с adv или partner...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да с банером понятно ничего страшного добавлю минимальную высоту для блока в которм лежит флеш чтобы не схлопывалось если флеш не подгрузился. Меня больше интересует вопрос из-за чего возникает этот глюк с ворнингом и насколько он критичный и как его избежать. Пока понял лишь одно дело в сессиях или куках

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PHP Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in /home/u/****/****/public_html/system/library/request.php on line 31

ну ведь все написано, товарищи, О_о

в оном файле на 31-ой строке

$data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
в функции
public function clean($data) {}
, которая применяется к

$_GET = $this->clean($_GET);		$_POST = $this->clean($_POST);		$_COOKIE = $this->clean($_COOKIE);		$_FILES = $this->clean($_FILES);		$_SERVER = $this->clean($_SERVER);
так что смотри, на какой странице выползает и какие данные попадают в эти массивы.

собсно,

Invalid multibyte
говорит о том, что данные получены не в UTF-8, как ожидала функция, а хз в какой (возможно в cp1251).

как вариант - убрать явное указание UTF-8 в вызове функции htmlspecialchars или дополнительно использовать функцию iconv().

в любом случае google в помощь :) http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=php+Invalid+multibyte+sequence+in+argument

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребята,у меня всё то же самое-та же проблема((Как решили?

Подозреваю,что началось когда поисковики на сайт "лазили" яндекс директы и прочие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребята,у меня всё то же самое-та же проблема((Как решили?

Подозреваю,что началось когда поисковики на сайт "лазили" яндекс директы и прочие.

мда.. это точно, у меня тоже самое, только что слетела кодировка

пытаюсь побороть..

Так,

1. При удалении cookie кодировка становится нормальной..

Смотрим дальше..

2. Ошибка возникает при переходе с яндекса на сайт, в браузере Google Chrome..

3. Как яндекс быстро реагирует-то..

Ссылка может оказаться не той, за которую себя выдает.

Она могла быть изменена с целью спама и фишинга или была создана давно.

Если вы действительно хотите перейти по этой ссылке, нажмите на нее здесь:
Изменено пользователем aachernishev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну ведь все написано, товарищи, О_о

в оном файле на 31-ой строке

$data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');

собсно,

Invalid multibyte
говорит о том, что данные получены не в UTF-8, как ожидала функция, а хз в какой (возможно в cp1251).

как вариант - убрать явное указание UTF-8 в вызове функции htmlspecialchars или дополнительно использовать функцию iconv().

Уважаемый Afwollis, у меня похожая ошибка, после захода с Яндекса, используя Google Chrome.

Появляется на всех страницах.

Кодировка слетает, становится вида :

Дротики РЎС

<b>Warning</b>: htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in <b>/system/library/request.php</b> on line <b>31</b><b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /index.php:96) in <b>/system/library/session.php</b> on line <b>21</b>

После того, как я в файле /system/library/request.php

поменял

public function clean($data) {
    	if (is_array($data)) {
	  		foreach ($data as $key => $value) {
				unset($data[$key]);
				
	    		$data[$this->clean($key)] = $this->clean($value);
	  		}
		} else { 
	  		$data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
		}

		return $data;
	}

на

public function clean($data) {
    	if (is_array($data)) {
	  		foreach ($data as $key => $value) {
				unset($data[$key]);
				
	    		$data[$this->clean($key)] = $this->clean($value);
	  		}
		} 

		return $data;
	}

Ошибка исчезла, во всех браузерах отображается всё нормально, в верной кодировке..

А вопрос такой..

Это может как-то аукнуться в дальнейшем?

И если да, то как?

Очень надеюсь на ответ, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это может как-то аукнуться в дальнейшем?

И если да, то как?

Да может.

XSS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да может.

XSS

Спасибо, действительно,

Подмена кодировки в заголовке страницы

Современные браузеры пытаются определить кодировку страницы на ходу и интерпретируют html в соответствии с этой кодировкой. В случае, если тег title расположен до тега meta и заполняется пользовательскими данными, хакер может вставить злонамеренный html-код в кодировке UTF-7, обойдя таким образом фильтрацию таких символов, как < и ".[4][5]

Для защиты от данной уязвимости следует явно указывать кодировку страницы до каких-либо пользовательских полей.

Хм, да, надо что-то другое придумать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну это ты совсем экзотику нашел... в твоём случае атака будет гораздо проще

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вам такое решение.

public function clean($data) {
static $php525;

        if (!isset($php525)) {
                $php525 = version_compare(PHP_VERSION, '5.2.5', '>=');
        }

        if (is_array($data)) {
                foreach ($data as $key => $value) {
                        unset($data[$key]);
                                
                        $data[$this->clean($key)] = $this->clean($value);
                }
        } else { 
                //Org: $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
                //Fix:
                if ($php525) {
                        $data = (preg_match('/^./us', (string) $data) == 1) ? htmlspecialchars((string) $data, ENT_QUOTES, 'UTF-8') : ”;
                } else {
                        $data = (preg_match('/^./us', $data) == 1) ? htmlspecialchars($data, ENT_QUOTES, 'UTF-8') : ”;
                }
        }

        return $data;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может лучше попытаться определить кодировку и конвертнуть в UTF-8?

Как-то вот так...

$data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));

А вообще у кого устойчиво наблюдается эта ошибка и готовы дать доступ к хостингу - отпишитесь в личку... постараюсь точно диагностировать проблему и найти нормальное решение.

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вам такое решение.

К сожалению, слетает кодировка при таком решении..(

А может лучше попытаться определить кодировку и конвертнуть в UTF-8?

Как-то вот так...

$data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));

А вот так работает, спасибо Вам огромное =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот так работает, спасибо Вам огромное =)

$data = htmlspecialchars($data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));

так получается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может лучше попытаться определить кодировку и конвертнуть в UTF-8?

Как-то вот так...

$data = mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));

А вообще у кого устойчиво наблюдается эта ошибка и готовы дать доступ к хостингу - отпишитесь в личку... постараюсь точно диагностировать проблему и найти нормальное решение.

После того, как поправил файл таким образом, стала два-три раза за сутки вылезать следующая ошибка:

PHP Warning:  mb_convert_encoding() [<a href='function.mb-convert-encoding'>function.mb-convert-encoding</a>]: Illegal character encoding specified in /system/library/request.php on line 31
Может кто-нибудь что-то подсказать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Удалось ли найти окончательное решение в итоге?

 

Уже попробовал в файле .htaccess  написать:

<IfModule mod_geoip.c>

GeoIPEnableUTF8 On
</IfModule>

 

и раскомментировал 

php_flag magic_quotes_gpc Off

Не помогает.

 

Проблема возникает в IE11 и Chrome при возвращении на "страницу успеха" после успешной оплаты Яндекс.Деньги. При этом слетает кодировка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спрашивай у яндекса, что за Г... он шлет в ответе и в какой кодировке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×