Непонятные- невидимые символы

1. Андрей (04.07.2011 / 18:05)
<?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 символы.

2. T-S (06.07.2011 / 20:24)
1) Объясни почему ты используешь регулярку?
Почему ты не используешь массив $_SERVER
Дай пример входа $str.
Я так понял там по строкам разбиты заголовки но все же. и зачем ты бросаешь мод i он же не нужен, только увеличивает время выполнения.
далее:
preg_match('/Host: (.*)\n/i',$str,$matches);
\n не обязателен если ты не используешь мод s.
Убери его и оптимизируется код.
Все же просил не придираться к коду но я не удержался извини.
Если ты уверен что проблема не в кодировке тогда не знаю но могу сказать точно что и не в регулярке. а хотя пробелы в регулярках замени на \s (Пустые символы)
Да и мой тебе совет присмотрись к preg_match_all

3. Андрей (07.07.2011 / 19:23)
2. T-S, Не использую массив $_SERVER так-как запускается из консоли и биндует порт.
Вот пример заголовков:
GET http://www.google.com/webhp?hl=ru HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
DNT: 1
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0&ie=utf-8&oe=utf-8
Cookie: PREF=ID=d9745f3985c8c5ba:U=102ef765f0eee1b8:FF=0:TM=1309792032:LM=1309793225:S=lsz5yWFvjnmd4N0n; NID=48=UVmwl_WDH93pzMCiw4JEeyuvNdJHNxMHMj19zzk_rNoLoBP708JPIgJVuNcMuEcU8Wbe2lT2vw1aJ2xZgdlTn-mRxGwnnrcyhBxwoIBhAzfl1Cqj1LWwpnKjSZJdXE1N; W6D=v4=0:ds=0:w=167:l=-4439:q=0; SID=DQAAAKAAAABxS8CmBzbaGDmLoi-Tzrz5ZBEDEw68R97P3toeXZ_jF6D62fg-1et25LOLXQKEQPYR9OOOVKRMbVr-C6OVZ_Wuui2PbAF
Из этого мне нужно достать GET (он может быть POST и CONNECT), HOST, изменить браузер и Proxy-Connection: keep-alive на Connection: Close
Proxy-Connection: может и не быть или может быть просто Connection, а строка нужна в любом случае.

Кривость кода порадило многократное переписывание его.

4. T-S (07.07.2011 / 21:49)
<?php
$str = 'GET http://www.google.com/webhp?hl=ru HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 WebMoney Advisor
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
DNT: 1
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0&ie=utf-8&oe=utf-8
Cookie: PREF=ID=d9745f3985c8c5ba:U=102ef765f0eee1b8:FF=0:TM=1309792032:LM=1309793225:S=lsz5yWFvjnmd4N0n; NID=48=UVmwl_WDH93pzMCiw4JEeyuvNdJHNxMHMj19zzk_rNoLoBP708JPIgJVuNcMuEcU8Wbe2lT2vw1aJ2xZgdlTn-mRxGwnnrcyhBxwoIBhAzfl1Cqj1LWwpnKjSZJdXE1N; W6D=v4=0:ds=0:w=167:l=-4439:q=0; SID=DQAAAKAAAABxS8CmBzbaGDmLoi-Tzrz5ZBEDEw68R97P3toeXZ_jF6D62fg-1et25LOLXQKEQPYR9OOOVKRMbVr-C6OVZ_Wuui2PbAF';

//Что если попробовать так.

$h      = explode("\n", $str);
$h[0]   = explode(' ', $h[0]);
$c      = count($h);
$header = array();

for ($i = 1; $i<$c; $i++) {
    $h[$i] = explode(': ', $h[$i]);
    $key = $h[$i][0];
    $val = $h[$i][1];
    $header[$key] = trim($val);
}

echo 'Метод: ' . $h[0][0] . ' = ' .$h[0][1] . "\n"; // POST/GET
var_dump($header);


5. T-S (07.07.2011 / 21:52)
Результат:

Метод: GET = http://www.google.com/webhp?hl=ru
array(10) {
  ["Host"]=>
  string(14) "www.google.com"
  ["User-Agent"]=>
  string(85) "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 WebMoney Advisor"
  ["Accept"]=>
  string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
  ["Accept-Language"]=>
  string(35) "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"
  ["Accept-Encoding"]=>
  string(13) "gzip, deflate"
  ["Accept-Charset"]=>
  string(32) "windows-1251,utf-8;q=0.7,*;q=0.7"
  ["DNT"]=>
  string(1) "1"
  ["Proxy-Connection"]=>
  string(10) "keep-alive"
  ["Referer"]=>
  string(177) "http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%BA%D0%B8+%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0&ie=utf-8&oe=utf-8"
  ["Cookie"]=>
  string(374) "PREF=ID=d9745f3985c8c5ba:U=102ef765f0eee1b8:FF=0:TM=1309792032:LM=1309793225:S=lsz5yWFvjnmd4N0n; NID=48=UVmwl_WDH93pzMCiw4JEeyuvNdJHNxMHMj19zzk_rNoLoBP708JPIgJVuNcMuEcU8Wbe2lT2vw1aJ2xZgdlTn-mRxGwnnrcyhBxwoIBhAzfl1Cqj1LWwpnKjSZJdXE1N; W6D=v4=0:ds=0:w=167:l=-4439:q=0; SID=DQAAAKAAAABxS8CmBzbaGDmLoi-Tzrz5ZBEDEw68R97P3toeXZ_jF6D62fg-1et25LOLXQKEQPYR9OOOVKRMbVr-C6OVZ_Wuui2PbAF"
}


URL: https://visavi.net/topics/22943