Php 使用波斯语字符Slug在Laravel中

Php 使用波斯语字符Slug在Laravel中,php,laravel,slug,Php,Laravel,Slug,我使用Laravel,我使用cviebrock/Elount sluggable为产品制作slug 因此,当我使用英文标题时效果很好,但每当我使用波斯语,例如“تتت”slug时,除了作为英文翻译外,如“tst” 我改变了弹射的方法 'method' => function ($string, $separator = '-') { if (is_null($string)) { return ""; } // Remove sp

我使用Laravel,我使用cviebrock/Elount sluggable为产品制作slug

因此,当我使用英文标题时效果很好,但每当我使用波斯语,例如“تتت”slug时,除了作为英文翻译外,如“tst” 我改变了弹射的方法

     'method' => function ($string, $separator = '-') {
     if (is_null($string)) {
         return "";
     }

     // Remove spaces from the beginning and from the end of the string
     $string = trim($string);

     // Lower case everything
     // using mb_strtolower() function is important for non-Latin UTF-8 string | more info: 
     $string = mb_strtolower($string, "UTF-8");;

     // Make alphanumeric (removes all other characters)
     // this makes the string safe especially when used as a part of a URL
     // this keeps latin characters and arabic charactrs as well
     $string = preg_replace("/[^a-z0-9_\s-ءاأإآؤئبتثجحخدذرزسشصضطظعغفقكلمنهويةى]#u/", "", $string);

     // Remove multiple dashes or whitespaces
     $string = preg_replace("/[\s-]+/", " ", $string);

     // Convert whitespaces and underscore to the given separator
     $string = preg_replace("/[\s_]/", $separator, $string);

     return $string;
 },
但还是一样,我找到了解决办法

首先,您必须将此提供程序设置为config/app.php

    Cviebrock\EloquentSluggable\ServiceProvider::class,
之后你就得跑了

vendor:publish
并选择可插入的服务提供程序

在此之后,在config/slaggable中必须进行更改

方法

像这样

'method' => function($string, $separator = '-') {
         $_transliteration = ["/ö|œ/" => "e",
             "/ü/" => "e",
             "/Ä/" => "e",
             "/Ü/" => "e",
             "/Ö/" => "e",
             "/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/" => "",
             "/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/" => "",
             "/Ç|Ć|Ĉ|Ċ|Č/" => "",
             "/ç|ć|ĉ|ċ|č/" => "",
             "/Ð|Ď|Đ/" => "",
             "/ð|ď|đ/" => "",
             "/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/" => "",
             "/è|é|ê|ë|ē|ĕ|ė|ę|ě/" => "",
             "/Ĝ|Ğ|Ġ|Ģ/" => "",
             "/ĝ|ğ|ġ|ģ/" => "",
             "/Ĥ|Ħ/" => "",
             "/ĥ|ħ/" => "",
             "/Ì|Í|Î|Ï|Ĩ|Ī| Ĭ|Ǐ|Į|İ/" => "",
             "/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/" => "",
             "/Ĵ/" => "",
             "/ĵ/" => "",
             "/Ķ/" => "",
             "/ķ/" => "",
             "/Ĺ|Ļ|Ľ|Ŀ|Ł/" => "",
             "/ĺ|ļ|ľ|ŀ|ł/" => "",
             "/Ñ|Ń|Ņ|Ň/" => "",
             "/ñ|ń|ņ|ň|ʼn/" => "",
             "/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/" => "",
             "/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/" => "",
             "/Ŕ|Ŗ|Ř/" => "",
             "/ŕ|ŗ|ř/" => "",
             "/Ś|Ŝ|Ş|Ș|Š/" => "",
             "/ś|ŝ|ş|ș|š|ſ/" => "",
             "/Ţ|Ț|Ť|Ŧ/" => "",
             "/ţ|ț|ť|ŧ/" => "",
             "/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/" => "",
             "/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/" => "",
             "/Ý|Ÿ|Ŷ/" => "",
             "/ý|ÿ|ŷ/" => "",
             "/Ŵ/" => "",
             "/ŵ/" => "",
             "/Ź|Ż|Ž/" => "",
             "/ź|ż|ž/" => "",
             "/Æ|Ǽ/" => "E",
             "/ß/" => "s",
             "/IJ/" => "J",
             "/ij/" => "j",
             "/Œ/" => "E",
             "/ƒ/" => ""];
         $quotedReplacement = preg_quote($separator, '/');
         $merge = [
             '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
             '/[\s\p{Zs}]+/mu' => $separator,
             sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
         ];
         $map = $_transliteration + $merge;
         unset($_transliteration);
         return preg_replace(array_keys($map), array_values($map), $string);
     },
我找到了解决办法

首先,您必须将此提供程序设置为config/app.php

    Cviebrock\EloquentSluggable\ServiceProvider::class,
之后你就得跑了

vendor:publish
并选择可插入的服务提供程序

在此之后,在config/slaggable中必须进行更改

方法

像这样

'method' => function($string, $separator = '-') {
         $_transliteration = ["/ö|œ/" => "e",
             "/ü/" => "e",
             "/Ä/" => "e",
             "/Ü/" => "e",
             "/Ö/" => "e",
             "/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/" => "",
             "/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/" => "",
             "/Ç|Ć|Ĉ|Ċ|Č/" => "",
             "/ç|ć|ĉ|ċ|č/" => "",
             "/Ð|Ď|Đ/" => "",
             "/ð|ď|đ/" => "",
             "/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/" => "",
             "/è|é|ê|ë|ē|ĕ|ė|ę|ě/" => "",
             "/Ĝ|Ğ|Ġ|Ģ/" => "",
             "/ĝ|ğ|ġ|ģ/" => "",
             "/Ĥ|Ħ/" => "",
             "/ĥ|ħ/" => "",
             "/Ì|Í|Î|Ï|Ĩ|Ī| Ĭ|Ǐ|Į|İ/" => "",
             "/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/" => "",
             "/Ĵ/" => "",
             "/ĵ/" => "",
             "/Ķ/" => "",
             "/ķ/" => "",
             "/Ĺ|Ļ|Ľ|Ŀ|Ł/" => "",
             "/ĺ|ļ|ľ|ŀ|ł/" => "",
             "/Ñ|Ń|Ņ|Ň/" => "",
             "/ñ|ń|ņ|ň|ʼn/" => "",
             "/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/" => "",
             "/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/" => "",
             "/Ŕ|Ŗ|Ř/" => "",
             "/ŕ|ŗ|ř/" => "",
             "/Ś|Ŝ|Ş|Ș|Š/" => "",
             "/ś|ŝ|ş|ș|š|ſ/" => "",
             "/Ţ|Ț|Ť|Ŧ/" => "",
             "/ţ|ț|ť|ŧ/" => "",
             "/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/" => "",
             "/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/" => "",
             "/Ý|Ÿ|Ŷ/" => "",
             "/ý|ÿ|ŷ/" => "",
             "/Ŵ/" => "",
             "/ŵ/" => "",
             "/Ź|Ż|Ž/" => "",
             "/ź|ż|ž/" => "",
             "/Æ|Ǽ/" => "E",
             "/ß/" => "s",
             "/IJ/" => "J",
             "/ij/" => "j",
             "/Œ/" => "E",
             "/ƒ/" => ""];
         $quotedReplacement = preg_quote($separator, '/');
         $merge = [
             '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
             '/[\s\p{Zs}]+/mu' => $separator,
             sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
         ];
         $map = $_transliteration + $merge;
         unset($_transliteration);
         return preg_replace(array_keys($map), array_values($map), $string);
     },

我认为
u
应该在正则表达式中的
/
结尾之后。另外,
#
可能放错了,我认为
u
应该放在正则表达式的
/
结尾之后。另外,
#
放在那里可能是错误的