2015-11-08 3 views
1

Я использовал Yii Sluggable Behavior, и он отлично работал на английском языке, но если я напишу арабский язык в текстовом поле имени и создаю новую запись, значение столбца slug в базе данных будет пустым.yii 2 sluggable behavior arabic

public function behaviors() 
     { 
      return [ 
       [ 
        'class' => SluggableBehavior::className(), 
        'attribute' => 'name', 
        'ensureUnique'=>true, 
        'slugAttribute' => 'slug', 
       ], 
      ]; 
     } 

Кто-нибудь знает, как заставить его поддерживать арабский и другие языки? Если нет, есть ли расширение, выполняющее эту работу?

Заранее спасибо.

+0

Попробуйте https://github.com/zelenin/yii2-slug-behavior с вариантами транслитерации. – Beowulfenator

+0

@Beowulfenator Zelenin slug behavior преобразует слово, например «أحمد» =>. «Ahmd», я не хочу, чтобы я хотел, чтобы слова оставались такими, какие есть. пример: 'مرحبا بك' => 'مرحبا-بك' –

ответ

2

Создание пули обычно предполагает использование регулярного выражения для исключения нежелательных символов, которые не совместимы с обычным URL-адресом.

Регулярные выражения, используемые в preg_replace или preg_match, обычно написаны для поддержки английских слизней, что исключает все другие типы символов, таких как арабский.

Я предлагаю вам написать свою собственную функцию пробивания с соответствующим диапазоном символов, включая арабские символы. Что-то вроде этого:

$slug = preg_replace("/[^a-zA-Z0-9ء-ي _\-]/u", "", $title); 

Это исключает все другие, чем те, в диапазонах символов A-Z, A-Z, 0-9, и арабский алфавит. Он также сохранит символы подчеркивания, тире и пробелы, которые вы можете заменить позже, если вам нужно.