mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-13 04:38:03 +08:00
Improved yii\helpers\Inflector::slug to support more cases for Russian, Hebrew and special characters
This commit is contained in:
@@ -87,6 +87,7 @@ Yii Framework 2 Change Log
|
||||
- Enh: Added support for using path alias with `FileDependency::fileName` (qiangxue)
|
||||
- Enh: Added param `hideOnSinglePage` to `yii\widgets\LinkPager` (arturf)
|
||||
- Enh: Added support for array attributes in `in` validator (creocoder)
|
||||
- Enh: Improved `yii\helpers\Inflector::slug` to support more cases for Russian, Hebrew and special characters (samdark)
|
||||
- Chg #2898: `yii\console\controllers\AssetController` is now using hashes instead of timestamps (samdark)
|
||||
- Chg #2913: RBAC `DbManager` is now initialized via migration (samdark)
|
||||
- Chg #3036: Upgraded Twitter Bootstrap to 3.1.x (qiangxue)
|
||||
|
||||
@@ -467,9 +467,9 @@ class BaseInflector
|
||||
public static function slug($string, $replacement = '-', $lowercase = true)
|
||||
{
|
||||
if (extension_loaded('intl') === true) {
|
||||
$options = 'Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove;';
|
||||
$options = 'Any-Latin; NFKD; [:Punctuation:] Remove; [^\u0000-\u007E] Remove';
|
||||
$string = transliterator_transliterate($options, $string);
|
||||
$string = preg_replace('/[-\s]+/', $replacement, $string);
|
||||
$string = preg_replace('/[=-\s]+/', $replacement, $string);
|
||||
} else {
|
||||
$string = str_replace(array_keys(static::$transliteration), static::$transliteration, $string);
|
||||
$string = preg_replace('/[^\p{L}\p{Nd}]+/u', $replacement, $string);
|
||||
|
||||
@@ -124,9 +124,21 @@ class InflectorTest extends TestCase
|
||||
|
||||
public function testSlug()
|
||||
{
|
||||
$this->assertEquals("privet-hello-jii-framework-kak-dela-how-it-goes", Inflector::slug('Привет Hello Йии-- Framework !--- Как дела ? How it goes ?'));
|
||||
$data = [
|
||||
'Привет. Hello, Йии-- Framework !--- Как дела ? How it goes ?' => 'privet-hello-jii-framework-kak-dela-how-it-goes',
|
||||
'this is a title' => 'this-is-a-title',
|
||||
'недвижимость' => 'nedvizimost',
|
||||
'áàâéèêíìîóòôúùûã' => 'aaaeeeiiiooouuua',
|
||||
'Ναδάλης ṃỹṛèşưḿĕ' => 'nadales-myresume',
|
||||
'E=mc²' => 'e-mc2',
|
||||
'è¼å¥' => 'e14a',
|
||||
];
|
||||
|
||||
$this->assertEquals("this-is-a-title", Inflector::slug('this is a title'));
|
||||
foreach ($data as $source => $expected) {
|
||||
$this->assertEquals($expected, Inflector::slug($source));
|
||||
}
|
||||
|
||||
//$this->assertEquals('this-is-my-text-', Inflector::slug('! this is my / text $## '));
|
||||
}
|
||||
|
||||
public function testClassify()
|
||||
|
||||
Reference in New Issue
Block a user