Функция генерации слагов PHP дает неправильный вывод - PullRequest
0 голосов
/ 19 января 2019

Я использую приведенный ниже код для получения правильного слага, отправляемого с помощью вызова ajax.

$slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', $_POST['slug'])));

Но, что происходит, так это.Если из ajax-запроса я получаю слаг, похожий на слаг

: top-5-ways--to-avoid-list-

Я хочу обрезать ненужные - дефисы и любые числовые значения из слага и хочу следующий слаг

slug: top-ways-to-avoid-list

Я не могу понять, что не так с кодом.

Ответы [ 2 ]

0 голосов
/ 19 января 2019

slugify ваша строка таким образом, он удалит нежелательные символы, включая -.

trim () принимает в качестве второго параметра все символы, которые вы хотите удалить . Итак, взгляните на закомментированную строку THIS WILL FIX YOUR EXISTING PROBLEM

<?php
function slugify($string, $delimiter = '-'){
  $clean = preg_replace("/[^a-zA-Z\/_|+ -]/", '', $string); 
  $clean = strtolower($clean);
  $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
  $clean = trim($clean, $delimiter); // THIS WILL FIX YOUR EXISTING PROBLEM
  return $clean;
}

echo slugify('-Top ways-to avoid list-');
echo PHP_EOL;
echo slugify('top 5 ways to get in top');
?>

Выход:

top-ways-to-avoid-list 
top-ways-to-get-in-top

ДЕМО: https://3v4l.org/ljtlZ

ИЛИ с существующим кодом, обрезающим несколько символов - или пробелы

<?php
echo strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', '-Top ways-to avoid list-'),'- '));
echo PHP_EOL;
echo strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top 5 ways to get in top'),'- '));
?>

DEMO: https://3v4l.org/aBtHI

0 голосов
/ 19 января 2019

Вы можете обрезать снова, чтобы удалить лишние '-' с обеих сторон строки.

   $slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top-5-ways--to-avoid-list-')));
    echo trim($slug, '-');

Результат: список лучших способов избежать

...