@@ -51,6 +51,9 @@ class AsciiSlugger implements SluggerInterface, LocaleAwareInterface
5151 ];
5252
5353 private $ defaultLocale ;
54+ private $ symbolsMap = [
55+ 'en ' => ['@ ' => 'at ' , '& ' => 'and ' ],
56+ ];
5457
5558 /**
5659 * Cache of transliterators per locale.
@@ -59,9 +62,10 @@ class AsciiSlugger implements SluggerInterface, LocaleAwareInterface
5962 */
6063 private $ transliterators = [];
6164
62- public function __construct (string $ defaultLocale = null )
65+ public function __construct (string $ defaultLocale = null , array $ symbolsMap = null )
6366 {
6467 $ this ->defaultLocale = $ defaultLocale ;
68+ $ this ->symbolsMap = $ symbolsMap ?? $ this ->symbolsMap ;
6569 }
6670
6771 /**
@@ -95,10 +99,15 @@ public function slug(string $string, string $separator = '-', string $locale = n
9599 $ transliterator = (array ) $ this ->createTransliterator ($ locale );
96100 }
97101
98- return (new UnicodeString ($ string ))
99- ->ascii ($ transliterator )
100- ->replace ('@ ' , $ separator .'at ' .$ separator )
101- ->replace ('& ' , $ separator .'and ' .$ separator )
102+ $ unicodeString = (new UnicodeString ($ string ))->ascii ($ transliterator );
103+
104+ if (isset ($ this ->symbolsMap [$ locale ])) {
105+ foreach ($ this ->symbolsMap [$ locale ] as $ char => $ replace ) {
106+ $ unicodeString = $ unicodeString ->replace ($ char , ' ' .$ replace .' ' );
107+ }
108+ }
109+
110+ return $ unicodeString
102111 ->replaceMatches ('/[^A-Za-z0-9]++/ ' , $ separator )
103112 ->trim ($ separator )
104113 ;
0 commit comments