Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заговор mbstring, не хочет работать! >( 
:(
    Опции темы
Vaulter
Дата 6.5.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



задача была проста
на входе имеем всякий мусор из $_GET $_POST или еще откуда (не суть)
на выводе: просто покласть в БД (это уже [censored 6]!!! smile)

читаю я и грызу стало быть про mbstring (о как хорошо, что она есть да этом долбанном сервере думал я!!! smile)

пишу
php.ini
Цитата

mbstring.detect_order = KOI8-R, CP866, cp1251, UTF-8, UTF-7, UTF-16, ASCII, JIS, EUC-JP, SJIS

проверяю:
Цитата

C:\Documents and Settings\Andrey.VAULTER>php -i | grep mbstring
mbstring
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser
General Public License version 2.1.
mbstring.detect_order => KOI8-R, CP866, cp1251, UTF-8, UTF-7, UTF-16, ASCII, JIS, EUC-JP, SJIS => KOI8-R, CP866, cp1251,
 UTF-8, UTF-7, UTF-16, ASCII, JIS, EUC-JP, SJIS
mbstring.encoding_translation => Off => Off
mbstring.func_overload => 0 => 0
mbstring.http_input => pass => pass
mbstring.http_output => pass => pass
mbstring.internal_encoding => ISO-8859-1 => no value
mbstring.language => neutral => neutral
mbstring.strict_detection => Off => Off
mbstring.substitute_character => no value => no value



но!!!
допустим на входе обычный запрос от яндекса 
вот такой код
Код

$referer = & $_SERVER['HTTP_REFERER'];
            $known = '.looksmart.co | .ifind.freeserve | .ask.co | google.co | '.
            'altavista.co | msn.co | yahoo.co |  yandex.ru | rambler.ru';
            if(preg_match('/('.$known.')/isx', $referer))
            {
                $blnSearchReferral=true;
                //get site domain — split at the first forward-slash
                $arr = parse_url($referer);
                // now find search parameters
                parse_str($arr['query'],$arrParams);
                //sys_log($arrParams);
                //define what search terms are in use by the different engines
                $arrQueryStrings = array();
                $arrQueryStrings[]='q';  //google, altavista, msn
                $arrQueryStrings[]='p';  //yahoo
                $arrQueryStrings[]='ask';  //ask jeeves
                $arrQueryStrings[]='key';  //looksmart
                $arrQueryStrings[]='text';  //yandex
                $arrQueryStrings[]='words';  //rambler
                $strSearchTerms = array_intersect(array_keys($arrParams), $arrQueryStrings);
                if(count($strSearchTerms))
                {//YO!
                    $request = urldecode($arrParams[array_pop($strSearchTerms)]);//some time UTF
                    sys_log('1.'.$request,'steps');
                    //mb_http_input == CONVERTCP?
                    if(function_exists('mb_convert_encoding'))//mb_encoding? FUCK
                    {
                        $enc = strtolower( mb_detect_encoding($request) );
                        //$enc2 = ;
                        sys_log('2.'.$enc,'steps');//.var_export(mb_detect_order(),true)
                        //sys_log(mb_http_input());
                        if( $enc && $enc!=CONVERTCP )
                        {
                            $request = mb_convert_encoding($request,CONVERTCP,$enc);
                            sys_log('3.'.$request,'steps');
                            if(strtolower( mb_detect_encoding($request) ) !=CONVERTCP)
                                sys_log('mb_convert_encoding failed: '.$enc.'->'.CONVERTCP.PHP_EOL.'request:'.$request.PHP_EOL.
                                'referer:'.urldecode($referer),'search');
                        }
                    }
                    //elseif(function_exists('iconv'))
                    //    $request = iconv('UTF-8','windows-1251',$request);
                    //else                    
                    //    $request = utf8_decode($request);//no variants
                    //sys_log($request);
                }
            }

в логах имею:
Цитата
steps:
#/*  -14:25:48 127.0.0.1 /------*/
1. проблемы банковской системы
#/*  -14:25:48 127.0.0.1 /------*/
2.euc-jp
#/*  -14:25:48 127.0.0.1 /------*/
3. ???? ????? ???
error:

#/*  -14:25:48 127.0.0.1 /------*/
mb_convert_encoding failed: euc-jp->cp1251
request: ???? ????? ???
referer:http://www.yandex.ru/yandsearch?text= проблемы банковской системы




 smile  smile  smile  smile 


--------------------
PM MAIL WWW ICQ   Вверх
Vaulter
Дата 6.5.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



изменил mb_detect_order (mbstring.detect_order) на
Цитата

cp1251, KOI8-R, CP866, UTF-8, UTF-7, UTF-16, ASCII

предыд. проблема исчезла, однако невзирая на все
при обработке UTF-8 строки вот такой код:
Код

                        $enc = strtolower( mb_detect_encoding($request) );
                        //$enc2 = ;
                        //sys_log('2.'.$enc,'steps');//.var_export(mb_detect_order(),true)
                        //sys_log(mb_http_input());
                        if( $enc && $enc!=CONVERTCP )
                        {
                            $request = mb_convert_encoding($request,CONVERTCP,$enc);
                            //sys_log('3.'.$request,'steps');
                            if(strtolower( mb_detect_encoding($request) ) !=CONVERTCP)
                                sys_log('mb_convert_encoding failed: '.$enc.'->'.CONVERTCP.'!='.strtolower( mb_detect_encoding($request) ).PHP_EOL.'request:'.$request.PHP_EOL.
                                'referer:'.urldecode($referer),'search');
                        }

постоянно пишет в логи:
[QUOTE]

#/* 05/06/07 19:23:46-19:23:46 91.143.129.214 /00025347.html------*/
mb_convert_encoding failed: utf-8->windows-1251!=
request:пути совершенствования учета основных средств
referer:http://ww

Это сообщение отредактировал(а) Vaulter - 6.5.2007, 18:48
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 8.5.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Vaulter, а с чего это ты вдруг сюда ( всмысле в mb_.* ) прикручиваешь 8-ми битные кодировки?! Насколько я знаю, mb_* не работают с ними, поэтому для конверта юзай iconv.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




[ Время генерации скрипта: 0.0809 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.