Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

Версия магазина 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

Насколько это критично, о чем говорят эти предупреждения и как их пофиксить?
Link to post
Share on other sites

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

Link to post
Share on other sites

  • 2 weeks later...

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 так вот захожу на основной сайт через мозилу ошибка есть захожу на зеркало ошибки нету, но все ссылке на странице закешированы и ведут на основной сайт перехожу по любой ссылки попадаю на основной сайт там ворнинг. Может быть дело в зеркале и в механизме кеширования?

Link to post
Share on other sites

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

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

Изображение

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

Изображение

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 3 months later...

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

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

Link to post
Share on other sites

  • 5 months later...

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

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

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

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

Так,

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

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

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

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

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

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

Если вы действительно хотите перейти по этой ссылке, нажмите на нее здесь:
Edited by aachernishev
Link to post
Share on other sites

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

в оном файле на 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;
	}

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

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

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

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

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

Link to post
Share on other sites

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

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

Да может.

XSS

Link to post
Share on other sites

Да может.

XSS

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

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

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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;
}
Link to post
Share on other sites

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

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

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

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

  • +1 2
Link to post
Share on other sites

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

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

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

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

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

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

Link to post
Share on other sites

  • 9 months later...

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

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

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

Link to post
Share on other sites

  • 3 months later...

А может лучше попытаться определить кодировку и конвертнуть в 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
Может кто-нибудь что-то подсказать?
Link to post
Share on other sites

  • 2 years later...

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

 

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

<IfModule mod_geoip.c>

GeoIPEnableUTF8 On
</IfModule>

 

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

php_flag magic_quotes_gpc Off

Не помогает.

 

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

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 1 year later...

Друзья,помогите решить проблему, ошибка возникает в логах опенкарт 2.0 периодически следующая, что это такое и как решить? 
017-05-28 8:35:32 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26
2017-05-28 8:35:32 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26
2017-05-28 8:35:32 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26
 

Link to post
Share on other sites

Добрый день, кто поможет как решить проблему! Ошибка в логах, не могу понять почему происходит.. 

017-05-28 8:35:32 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26
2017-05-28 8:35:32 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26
2017-05-28 8:35:32 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26
2017-05-28 9:04:06 - PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in /home/c/cg37952/test1/public_html/system/library/request.php on line 26

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.