2015-11-08 44 views
1

我用Yii Sluggable Behavior并且它对英语很好,但如果我在名称文本字段中编写阿拉伯语并创建一个新条目,则数据库中slug列的值为空。yii 2 sluggable behaviour 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 slu behavior行为转换这个词,例如“أحمد”=>“ahmd”,我不希望我想让这些单词保持原样。例如:'مرحبابك'=>'مرحبا-بك' –

回答

2

创建slug通常涉及到使用正则表达式来排除不符合正常URL格式的不需要的字符。

preg_replacepreg_match中使用的正则表达式通常用于支持英语slug,因此排除了所有其他类型的字符,如阿拉伯语。

我建议你用适当的字符范围写下你自己的段击功能,包括阿拉伯字符。事情是这样的:

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

这将排除在范围之外的其他所有字符A-Z,A-Z,0-9和阿拉伯字母。它还会保留下划线,破折号和空格,如果需要,您可以稍后替换它们。