<?php
function parseQuery($str){
preg_match('/Host: (.*)\n/i',$str,$matches);
$res['host']=$matches[1];
$host=$matches[1];
preg_match('/:( .*)/i',$res['host'],$matches);
@$res['port']=$matches[1];
preg_match('/GET (.*) /i',$str,$matches);
if(isset($matches[1]) && $matches[1]!=''){
$res['tmpport']=80;
}
preg_match('/POST (.*) /i',$str,$matches);
if(isset($matches[1]) && $matches[1]!=''){
$res['tmpport']=80;
}
preg_match('/CONNECT (.*) /i',$str,$matches);
if(isset($matches[1]) && $matches[1]!=''){
if(!isset($res['port']) || $res['port']==''){
$res['port']=433;
}
}
if(!isset($res['port']) || $res['port']==''){
$res['port']=$res['tmpport'];
}
//$res['host']=preg_replace('/(.*):/i','\1',$res['host']);
preg_match('/[GET|POST|CONNECT] (.*) HTTP/Ui',$str,$url);
return GetUrl(trim($url[1]),'',1);
//return getSite($res['host'],$res['port'],$str);
}
?>
Функции передаются заголовки браузера, после обработки этой функцией, появляются разные non print символы.
Например если не обработать переменную $url[1] функцией trim(),то сокет выдаёт ошибку что адрес не найден, и так со всеми переменными.
Скрипт в utf-8.
Кривость функции на данный момент не важна.
Добавлено через 03:01 сек.
Браузер посылает в загаловках только латиницу, думаю с кодировкой это не связано, скорей всего строки портят регулярки (обрезают лишние байты) модификатор u не помогает.
Добавлено через 06:58 сек.
GetUrl()- запрашивает через curl.
getSite()- через сокеты.
Обеим функциям мешают эти non print символы.
Changed: Андрей (04.07.2011 / 18:09)