适用于所有语言的PHP slug函数

时间:2014-05-04 12:07:30

标签: php utf-8 arabic slug

我想知道是否有一个简单的函数/代码可以处理从给定字符串创建一个slug。

我正在使用多语言网站(英语,西班牙语和阿拉伯语),我不确定如何处理西班牙语和阿拉伯语。

我目前正在使用CSS-Tricks的以下代码,但它不适用于UTF-8文本。

<?php
function create_slug($string){
   $slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
   return $slug;
}
echo create_slug('does this thing work or not');
//returns 'does-this-thing-work-or-not'
?>

2 个答案:

答案 0 :(得分:1)

我为此目的创建了库ausi/slug-generator

它使用PHP Intl扩展,在不同脚本之间进行转换,这些脚本本身基于Unicode CLDR的数据。这种方式适用于多种语言。

您可以像这样使用它:

<?php
$generator = new SlugGenerator;

$generator->generate('English language!');
// Result: english-language

$generator->generate('Idioma español!');
// Result: idioma-espanol

$generator->generate('لغة عربية');
// Result: lght-rbyt

答案 1 :(得分:1)

如果您想使用相同的文本而不进行翻译

function slug($str, $limit = null) {
    if ($limit) {
        $str = mb_substr($str, 0, $limit, "utf-8");
    }
    $text = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
    // replace non letter or digits by -
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
    // trim
    $text = trim($text, '-');
    return $text;
}

通过:Walid Karray