задача была проста на входе имеем всякий мусор из $_GET $_POST или еще откуда (не суть) на выводе: просто покласть в БД (это уже [censored 6]!!! )
читаю я и грызу стало быть про mbstring (о как хорошо, что она есть да этом долбанном сервере думал я!!! )
пишу 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= проблемы банковской системы
|
|