From fb4c36d7cb6042fbec466f9bfb1cf3d0caeb6854 Mon Sep 17 00:00:00 2001 From: uckelman Date: Thu, 25 Nov 2010 11:15:16 +0000 Subject: Added has_rfc822_specials and rfc822_quote for handling names in email addresses. git-svn-id: https://vassalengine.svn.sourceforge.net/svnroot/vassalengine/site-src/trunk@7492 67b53d14-2c14-4ace-a08f-0dab2b34000c --- src/Util.php | 11 +++++++++++ test/UtilTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Util.php b/src/Util.php index 0f1499a..47a26a4 100644 --- a/src/Util.php +++ b/src/Util.php @@ -24,6 +24,17 @@ function throw_if_null($arg) { if ($arg === null) throw new Exception('argument is null'); } +function has_rfc822_specials($str) { + // check for RFC822 specials (see section 3.3) + return strpbrk($str, '()<>@,;:\".[]') !== false; +} + +function rfc822_quote($str) { + // turn \ and " into quoted-pairs, then quote the whole string + return '"' . str_replace(array("\\", "\"",), + array("\\\\", "\\\""), $str) . '"'; +} + function is_ascii($str) { return !preg_match('/[^[:ascii:]]/', $str); } diff --git a/test/UtilTest.php b/test/UtilTest.php index 7135b9f..1cf8eac 100644 --- a/test/UtilTest.php +++ b/test/UtilTest.php @@ -5,6 +5,33 @@ require_once('PHPUnit/Framework.php'); require_once(__DIR__ . '/../src/Util.php'); class UtilTest extends PHPUnit_Framework_TestCase { + + public function has_rfc822_specials_provider() { + return array( + array('Joel Uckelman', false), + array('L.Tankersley', true), + array('()<>@,;:\".[]', true) + ); + } + + /** @dataProvider has_rfc822_specials_provider */ + public function test_has_rfc822_specials($string, $expected) { + $this->assertEquals($expected, has_rfc_822_specials($string)); + } + + public function rfc822_quote_provider() { + return array( + array('Joel Uckelman', 'Joel Uckelman'), + array('L.Tankersley', '"L.Tankersley"'), + array('"\foo\"', '"\"\\foo\\\""') + ); + } + + /** @dataProvider rfc822_quote_provider */ + public function test_rfc822_quote($string, $expected) { + $this->assertEquals($expected, rfc_822_quote($string)); + } + public function is_ascii_provider() { return array( array('', true), -- cgit v1.2.3