diff --git a/model/URLSegmentFilter.php b/model/URLSegmentFilter.php index 9db39725d..38b125a86 100644 --- a/model/URLSegmentFilter.php +++ b/model/URLSegmentFilter.php @@ -33,7 +33,8 @@ class URLSegmentFilter extends Object { '/[_.]+/u' => '-', // underscores and dots to dashes '/[^A-Za-z0-9\-]+/u' => '', // remove non-ASCII chars, only allow alphanumeric and dashes '/[\-]{2,}/u' => '-', // remove duplicate dashes - '/^[\-]+/u' => '' // Remove all leading dashes + '/^[\-]+/u' => '', // Remove all leading dashes + '/[\-]+$/u' => '' // Remove all trailing dashes ); /** diff --git a/tests/model/URLSegmentFilterTest.php b/tests/model/URLSegmentFilterTest.php index 74ef70094..4dd77a97c 100644 --- a/tests/model/URLSegmentFilterTest.php +++ b/tests/model/URLSegmentFilterTest.php @@ -41,8 +41,8 @@ class URLSegmentFilterTest extends SapphireTest { public function testReplacesCommonNonAsciiCharacters() { $f = new URLSegmentFilter(); $this->assertEquals( - urlencode('aa1-'), - $f->filter('Aa1~!@#$%^*()_`-=;\':"[]\{}|,./<>?') + urlencode('aa1-a'), + $f->filter('Aa1~!@#$%^*()_`-=;\':"[]\{}|,./<>?a') ); } @@ -82,4 +82,9 @@ class URLSegmentFilterTest extends SapphireTest { $this->assertEquals('url-has-leading-dashes', $filter->filter('---url-has-leading-dashes')); } + public function testReplacesTrailingDashes() { + $filter = new URLSegmentFilter(); + $this->assertEquals('url-has-trailing-dashes', $filter->filter('url-has-trailing-dashes--')); + } + }