diff --git a/src/Language/Lexer.php b/src/Language/Lexer.php index 80a4eab..a8b1e91 100644 --- a/src/Language/Lexer.php +++ b/src/Language/Lexer.php @@ -229,13 +229,13 @@ class Lexer $code = Utils::charCodeAt($body, $position); switch ($code) { case 34: $value .= '"'; break; - case 47: $value .= '\/'; break; + case 47: $value .= '/'; break; case 92: $value .= '\\'; break; - case 98: $value .= '\b'; break; - case 102: $value .= '\f'; break; - case 110: $value .= '\n'; break; - case 114: $value .= '\r'; break; - case 116: $value .= '\t'; break; + case 98: $value .= chr(8); break; // \b (backspace) + case 102: $value .= "\f"; break; + case 110: $value .= "\n"; break; + case 114: $value .= "\r"; break; + case 116: $value .= "\t"; break; case 117: $hex = mb_substr($body, $position + 1, 4); if (!preg_match('/[0-9a-fA-F]{4}/', $hex)) { diff --git a/tests/Language/LexerTest.php b/tests/Language/LexerTest.php index 1d3f472..65ae845 100644 --- a/tests/Language/LexerTest.php +++ b/tests/Language/LexerTest.php @@ -58,8 +58,8 @@ class LexerTest extends \PHPUnit_Framework_TestCase $this->assertEquals(new Token(Token::STRING, 0, 8, 'simple'), $this->lexOne('"simple"')); $this->assertEquals(new Token(Token::STRING, 0, 15, ' white space '), $this->lexOne('" white space "')); $this->assertEquals(new Token(Token::STRING, 0, 10, 'quote "'), $this->lexOne('"quote \\""')); - $this->assertEquals(new Token(Token::STRING, 0, 20, 'escaped \n\r\b\t\f'), $this->lexOne('"escaped \\n\\r\\b\\t\\f"')); - $this->assertEquals(new Token(Token::STRING, 0, 15, 'slashes \\ \/'), $this->lexOne('"slashes \\\\ \\/"')); + $this->assertEquals(new Token(Token::STRING, 0, 25, 'escaped \n\r\b\t\f'), $this->lexOne('"escaped \\\\n\\\\r\\\\b\\\\t\\\\f"')); + $this->assertEquals(new Token(Token::STRING, 0, 16, 'slashes \\ \/'), $this->lexOne('"slashes \\\\ \\\\/"')); $this->assertEquals(new Token(Token::STRING, 0, 13, 'unicode яуц'), $this->lexOne('"unicode яуц"'));