没有使用preg_replace()的PHP slugify方法

时间:2011-10-01 07:31:34

标签: php pcre

我正在使用以下slugify方法,在我的本地开发工作正常,但在我的生产服务器(CentOs)和PCRE UTF8支持,但“没有Unicode属性支持”。

function slugify($text)
{
    // replace non letter or digits by -
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text);

    // trim
    $text = trim($text, '-');

    // transliterate
    if (function_exists('iconv')) {
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    }

    // lowercase
    $text = strtolower($text);

    // remove unwanted characters
    $text = preg_replace('~[^-\w]+~', '', $text);

    if (empty($text)) {
        return 'n-a';
    }
    return $text;
}

并且preg_replace不能在那里工作,是否有任何方法可以作为preg_replace工作,或任何可以作为上述函数工作的slugify muthod。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这听起来与此处描述的问题相同:http://chrisjean.com/2009/01/31/unicode-support-on-centos-52-with-php-and-pcre/。我在自己之前遇到过这个问题,而这个链接就是我修复它的方式(或者更确切地说,我们的系统管理员如何修复它)。

基本上,如果您没有“Unicode属性支持”,第一个正则表达式中的\ pL将无法运行或编译。