Почему функция slug оставляет - в конце заголовка, если есть какой-либо символ? - PullRequest
0 голосов
/ 25 апреля 2020

хейя все,

моя функция слизня работает, но у меня проблема.

скажи, если я напишу какой-нибудь заголовок для статьи, например, лиса очень хитрая, почему?

сейчас, потому что я добавил? в конце названия я получаю - например, «лиса очень хитрая», почему -

вот моя функция

function slug( $string, $separator = '-' )
{
    $accents_regex = '~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i';
    $special_cases = array( '&' => 'and', '@' => 'at', '%' => 'percent', "'" => '');
    $string = mb_strtolower( trim( $string ), 'UTF-8' );
    $string = str_replace( array_keys($special_cases), array_values( $special_cases), $string );
    $string = preg_replace( $accents_regex, '$1', htmlentities( $string, ENT_QUOTES, 'UTF-8' ) );
    $string = preg_replace("/[^a-z0-9]/u", "$separator", $string);
    $string = preg_replace("/[$separator]+/u", "$separator", $string);
    return $string;
}

Может кто-нибудь помочь исправить, пожалуйста?

Спасибо

1 Ответ

1 голос
/ 25 апреля 2020
$string = preg_replace("/[^a-z0-9]/u", "$separator", $string);

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

Вы можете добавить $string = trim($string, $separator); в конце функции, чтобы удалить завершающие символы $separator в конце строки.

...