Может вы видите какие-либо проблемы с моим функция служивым?


Я создаю функцию, которая преобразует название слизняк URL-адрес. Я не все знакомы с регулярными выражениями, но я сделал все возможное. Может вы видите какие-либо проблемы или улучшения следующей функцией ниже?

Единственное, что допускается в слаг-это буквы, цифры и - charchaters.

function slugify($input) {
    // Convert multiple spaces to single spaces
    $slug = preg_replace("/[[:blank:]]+/",' ', $input);
    // Convert to lower case
    $slug = strtolower($slug);
    // Remove anything that's not a number, letter or space
    $slug = preg_replace('/[^a-z0-9\s]+/', '', $slug);
    // Trim, and replace spaces with hyphens
    $slug = preg_replace('/\s/', '-', trim($slug));

    return $slug;
}


420
1
php
задан 21 июня 2011 в 12:06 Источник Поделиться
Комментарии
3 ответа

Вот моя функция служивым:

function strtourl($string){
$p=array('/ /i','/[^a-z0-9\-]/i');
$s=array('-','');
return strtolower(preg_replace($p, $s, trim($string)));
}

Вы можете использовать его.

2
ответ дан 21 июня 2011 в 12:06 Источник Поделиться

$slug = preg_replace("/[[:blank:]]+/",' ', $input);

должно быть:

$slug = preg_replace("/\s+/",' ', $input);

1
ответ дан 21 июня 2011 в 12:06 Источник Поделиться

Вы должны подготовить пакет предложений, чтобы почистить и проверить сами, если ваша функция-это нормально.

Ниже шаг я использую, чтобы почистить текст:


  1. Использовать функцию iconv() при наличии:

    $слаг = с iconv('кодировка UTF-8', 'ASCII США//транслит', $текст);


  2. Строчная текст, Юникод принимая во внимание:

    $слаг = mb_strtolower($слаг);


  3. Удаление нежелательных символов, как вы делаете:

    $слаг = код preg_replace('/\ж+/', '-', $слаг);


Эти шаги, используемые в ОРМ продвинуть или фреймворк Symfony например.
Полный код может быть:

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

// lowercase
if (function_exists('mb_strtolower'))
{
$slug = mb_strtolower($slug);
}
else
{
$slug = strtolower($slug);
}

// remove accents resulting from OSX's iconv
$slug = str_replace(array('\'', '`', '^'), '', $slug);

// replace non letter or digits with separator
$slug = preg_replace('/\W+/', $separator, $slug);

// trim
$slug = trim($slug, $separator);

return $slug;
}

Я думаю, что $текст - это лучше, чем $входной строки к служивым.

1
ответ дан 21 июня 2011 в 02:06 Источник Поделиться