From efef3c29068b9a91953db439780007bcb46f0a29 Mon Sep 17 00:00:00 2001 From: Michael Dowling Date: Sat, 24 Aug 2013 19:15:08 -0700 Subject: [PATCH] Only exploding on header glue when not inside of a comma. Closes #411 --- src/Guzzle/Http/Message/Header.php | 3 ++- tests/Guzzle/Tests/Http/Message/Header/LinkTest.php | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Guzzle/Http/Message/Header.php b/src/Guzzle/Http/Message/Header.php index b919166a..6f4d7105 100644 --- a/src/Guzzle/Http/Message/Header.php +++ b/src/Guzzle/Http/Message/Header.php @@ -81,7 +81,8 @@ class Header implements HeaderInterface for ($i = 0, $total = count($values); $i < $total; $i++) { if (strpos($values[$i], $this->glue) !== false) { - foreach (explode($this->glue, $values[$i]) as $v) { + // Explode on glue when the glue is not inside of a comma + foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) { $values[] = trim($v); } unset($values[$i]); diff --git a/tests/Guzzle/Tests/Http/Message/Header/LinkTest.php b/tests/Guzzle/Tests/Http/Message/Header/LinkTest.php index 118a7f82..c834d101 100644 --- a/tests/Guzzle/Tests/Http/Message/Header/LinkTest.php +++ b/tests/Guzzle/Tests/Http/Message/Header/LinkTest.php @@ -48,4 +48,16 @@ class LinkTest extends GuzzleTestCase (string) $link ); } + + public function testCanParseLinksWithCommas() + { + $link = new Link('Link', '; rel="previous"; title="start, index"'); + $this->assertEquals(array( + array( + 'rel' => 'previous', + 'title' => 'start, index', + 'url' => 'http://example.com/TheBook/chapter1', + ) + ), $link->getLinks()); + } }