PHP ve HTTP Üstbilgi Satır Sonları: temsil etmek için kullanılan ne karakter?

2 Cevap php

Ben bir sona erdiğinde algılamaya çalışırken, http başlıklarını döndürülen CURL bir dizi her satırı döngü yaşıyorum ve sonraki başlar. Ben bir http başlık boş bir satır ile sona olduğunu biliyorum, ama ne karakter php bu satır sonu temsil etmek için kullanılır? I \n ile denedim ama çalışmak için görünmüyor. Ben kesinlikle yanlış bir şey yapıyor olabilir.

Ne karakter bir başlık sonlandırmak için kullanılan satır sonu temsil etmek için kullanılır?

İşte benim mevcut kod:

$redirect = '';
$regs = '';
foreach ($curl_response as $line)
{	
	if ($line != "\n")
	{	# line is not a linebreak, so we're still processing a header block

		if (preg_match("(HTTP/[0-9]\.[0-9] [0-9]{3} .*)",$line))
		{	# line is the status code
			# highlight the outputted line
			$output .= "<b style='background: yellow;'>$line</b>";
		}

		elseif (preg_match("/^Location: (.*)$/m",$line,$regs)) 
		{	# the line is a location header, so grab the location being redirected to
			# highlight the outputted line
			$output .= "<b style='background: purple; color: white;'>$line</b>";
			$redirect = $regs[1];
		}

		else 
		{	# some other header, record to output
			$output .= $line;
		}

	}

	else 
	{	# we've reached a line break, so we're getting to a new block of redirects
		$output .= "\nreached line break\n";
		if ($redirect != '')
		{	# if we recorded a redirect above, append it to output
			$output .= "\n\nRedirecting to $redirect\n\n";
			$redirect = '';
		}

	}	

}

echo $output;

Solved - \r Ben eşleşen edilmiş ne olduğunu çıkıyor. Çok garip. Bu site başına değiştiriyorsa, ya da curl ayarlanmış bir şey değil emin eğer. Şimdiye kadar onun \r tüm sitelerde denedim.

Edit 2: Doh. Ben hatları bir diziye başlığını almak için, ben \n Kes patladı çünkü düşünüyorum. Yani belki de herhangi bir \r\n şimdi sadece \r ...

$c = explode("\n",$content);

2 Cevap

Bu da geçerli sonlandırma boş hatları gibi, aynı zamanda "\ r \ n" ve "\ r" için kontrol etmeniz gerekir.

Ne zaman kurallı biçimde, metin satır sonu olarak "metin" tipi kullanım CRLF medya alt tipleri. HTTP bu gereksinimi rahatlatır ve düz CR veya LF tek başına bütün bir varlık-vücut için sürekli yapıldığında bir satır sonu temsil eden metin medyanın taşınmasını sağlar. HTTP uygulamaları HTTP üzerinden alınan metin medyada bir satır sonu temsilcisi olarak CRLF'yi, çıplak CR, ve çıplak LF kabul ZORUNLU.

- HTTP/1.1: Protocol Parameters - 3.7.1 Canonicalization and Text Defaults

Başlıkları (yani boş bir satır) arasında hiçbir boşluk içeren bir çift satır sonu ile sonlanır. Bir satır sonu "\ n" veya "\ r \ n" olabilir (bazı durumlarda ben sadece öğrendim ya, "\ r", ama bu ortak olduğunu sanmıyorum).

Belki sizin gibi bir düzenli ifade ile maç olabilir

list($headers) = preg_split('/\r?\n\r?\n|\r\r/S', $httpresponse);