用于制作 slug 的 PHP 函数(URL 字符串)

2022-08-30 06:20:14

我想要一个函数来从Unicode字符串创建slug,例如 应该返回 。我应该怎么做?gen_slug('Andrés Cortez')andres-cortez


答案 1

与其冗长的替换,不如试试这个:

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

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

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

  // trim
  $text = trim($text, $divider);

  // remove duplicate divider
  $text = preg_replace('~-+~', $divider, $text);

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

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

  return $text;
}

这是基于Symfony的Jobeet教程中的那个。


答案 2

更新

由于这个答案引起了一些关注,所以我增加了一些解释。

提供的解决方案基本上将替换除 A-Z、a-z、0-9 和 - (连字符)之外的所有内容。因此,它不能与其他 unicode 字符(这些字符是 URL slug/string 的有效字符)一起正常工作。一种常见情况是输入字符串包含非英语字符。

仅当您确信输入字符串不包含 Unicode 字符时,才使用此解决方案,您可能希望将其作为输出/辅助信息块的一部分。

例如。“नारी शक्ति”将变为“----------”(所有连字符),而不是“नारी-शक्ति”(有效的URL slug)。

$slug = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));

推荐