PHP slugify метод без использования preg_replace () - PullRequest
2 голосов
/ 01 октября 2011

Я использую следующий метод 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 Ответ

1 голос
/ 19 ноября 2011

Это похоже на ту же проблему, описанную здесь: http://chrisjean.com/2009/01/31/unicode-support-on-centos-52-with-php-and-pcre/. Я столкнулся с ней раньше себя, и эта ссылка - это то, как я это исправил (или, скорее, как наш сисадмин исправил это).

По сути, \ pL в первом регулярном выражении не будет запускаться или компилироваться, если у вас нет "поддержки свойств Unicode".

...