Added CI_Output::get_header()

(an improved version of PR #645)

Also fixed get_content_type() to only return the MIME value and created
Output library unit tests for both of these methods.
diff --git a/system/core/Output.php b/system/core/Output.php
index 6312ccd..7bfde07 100644
--- a/system/core/Output.php
+++ b/system/core/Output.php
@@ -256,7 +256,7 @@
 	{
 		for ($i = 0, $c = count($this->headers); $i < $c; $i++)
 		{
-			if (sscanf($this->headers[$i][0], 'Content-Type: %s', $content_type) === 1)
+			if (sscanf($this->headers[$i][0], 'Content-Type: %[^;]', $content_type) === 1)
 			{
 				return $content_type;
 			}
@@ -268,6 +268,39 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Get Header
+	 *
+	 * @param	string	$header_name
+	 * @return	string
+	 */
+	public function get_header($header)
+	{
+		// Combine headers already sent with our batched headers
+		$headers = array_merge(
+			// We only need [x][0] from our multi-dimensional array
+			array_map('array_shift', $this->headers),
+			headers_list()
+		);
+
+		if (empty($headers) OR empty($header))
+		{
+			return NULL;
+		}
+
+		for ($i = 0, $c = count($headers); $i < $c; $i++)
+		{
+			if (strncasecmp($header, $headers[$i], $l = strlen($header)) === 0)
+			{
+				return trim(substr($headers[$i], $l+1));
+			}
+		}
+
+		return NULL;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Set HTTP Status Header
 	 *
 	 * As of version 1.7.2, this is an alias for common function
diff --git a/tests/codeigniter/core/Output_test.php b/tests/codeigniter/core/Output_test.php
new file mode 100644
index 0000000..3384143
--- /dev/null
+++ b/tests/codeigniter/core/Output_test.php
@@ -0,0 +1,35 @@
+<?php
+
+class Output_test extends CI_TestCase {
+
+	public function set_up()
+	{
+		$this->ci_set_config('charset', 'UTF-8');
+		$output = $this->ci_core_class('output');
+                $this->output = new $output();
+	}
+
+	// --------------------------------------------------------------------
+
+	public function test_get_content_type()
+	{
+		$this->assertEquals('text/html', $this->output->get_content_type());
+	}
+
+	// --------------------------------------------------------------------
+
+	public function test_get_header()
+	{
+		$this->assertNull($this->output->get_header('Non-Existent-Header'));
+
+		// TODO: Find a way to test header() values as well. Currently,
+		//	 PHPUnit prevents this by not using output buffering.
+
+		$this->output->set_content_type('text/plain', 'WINDOWS-1251');
+		$this->assertEquals(
+			'text/plain; charset=windows-1251',		// Character set is converted to lowercase
+			$this->output->get_header('content-type')	// Case-insensitive comparison
+		);
+	}
+
+}
\ No newline at end of file
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index ab1d99d..09c425d 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -294,8 +294,9 @@
    -  Added support for HTTP-Only cookies with new config option *cookie_httponly* (default FALSE).
    -  Renamed method ``_call_hook()`` to ``call_hook()`` in the :doc:`Hooks Library <general/hooks>`.
    -  :doc:`Output Library <libraries/output>` changes include:
-	 -  Added method ``get_content_type()``.
 	 -  Added a second argument to method ``set_content_type()`` that allows setting the document charset as well.
+	 -  Added method ``get_content_type()``.
+	 -  Added method ``get_header()``.
    -  ``$config['time_reference']`` now supports all timezone strings supported by PHP.
    -  :doc:`Config Library <libraries/config>` changes include:
 	 -  Changed ``site_url()`` method  to accept an array as well.
diff --git a/user_guide_src/source/libraries/output.rst b/user_guide_src/source/libraries/output.rst
index 82b1a56..a3d67b8 100644
--- a/user_guide_src/source/libraries/output.rst
+++ b/user_guide_src/source/libraries/output.rst
@@ -53,17 +53,37 @@
 
 	$this->output->set_content_type('css', 'utf-8');
 
-$this->output->get_content_type();
-==========================================
+$this->output->get_content_type()
+=================================
 
-Returns the Content-Type HTTP header that's currently in use.
+Returns the Content-Type HTTP header that's currently in use,
+excluding the character set value.
 
 	$mime = $this->output->get_content_type();
 
 .. note:: If not set, the default return value is 'text/html'.
 
-$this->output->get_output();
-=============================
+$this->output->get_header()
+===========================
+
+Gets the requested HTTP header value, if set.
+
+If the header is not set, NULL will be returned.
+If an empty value is passed to the method, it will return FALSE.
+
+Example::
+
+	$this->output->set_content_type('text/plain', 'UTF-8');
+	echo $this->output->get_header('content-type');
+	// Outputs: text/plain; charset=utf-8
+
+.. note:: The header name is compared in a case-insensitive manner.
+
+.. note:: Raw headers sent via PHP's native ``header()`` function are
+	also detected.
+
+$this->output->get_output()
+===========================
 
 Permits you to manually retrieve any output that has been sent for
 storage in the output class. Usage example::