PHP将字符串转换为slug

时间:2016-11-16 20:45:41

标签: php string

将一串文本转换为slug的最佳方法是什么?含义:

  • 允许使用alpha,转换为小写
  • 允许使用数字
  • 空格应该被删除,而不是转换为破折号(" - ")
  • 重音字符替换为等效标准alpha
  • 不允许使用任何其他字符,

我在网上找到了大量的代码,但它们都倾向于将空格转换为破折号,我不想这样做。

我也有兴趣改变转换,其中:

  • &符号("&")应替换为字符串"和"

还有一个变体,其中:

  • 不要将重音字符转换为等效的标准alpha

2 个答案:

答案 0 :(得分:13)

这是我最初在这里找到的修改过的函数(http://cubiq.org/the-perfect-php-clean-url-generator)。您可以将''作为分隔符,不使用'-'

public static function createSlug($str, $delimiter = '-'){

    $slug = strtolower(trim(preg_replace('/[\s-]+/', $delimiter, preg_replace('/[^A-Za-z0-9-]+/', $delimiter, preg_replace('/[&]/', 'and', preg_replace('/[\']/', '', iconv('UTF-8', 'ASCII//TRANSLIT', $str))))), $delimiter));
    return $slug;

} 

答案 1 :(得分:1)

上一个是很好的解决方案。但不幸的是,它切断了像ć或ż这样的特定字母。 如果你想保留它们,那么:

public static function createSlug($str, $delimiter = '-'){

    $unwanted_array = ['ś'=>'s', 'ą' => 'a', 'ć' => 'c', 'ç' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ź' => 'z', 'ż' => 'z',
        'Ś'=>'s', 'Ą' => 'a', 'Ć' => 'c', 'Ç' => 'c', 'Ę' => 'e', 'Ł' => 'l', 'Ń' => 'n', 'Ó' => 'o', 'Ź' => 'z', 'Ż' => 'z']; // Polish letters for example
    $str = strtr( $str, $unwanted_array );

    $slug = strtolower(trim(preg_replace('/[\s-]+/', $delimiter, preg_replace('/[^A-Za-z0-9-]+/', $delimiter, preg_replace('/[&]/', 'and', preg_replace('/[\']/', '', iconv('UTF-8', 'ASCII//TRANSLIT', $str))))), $delimiter));
    return $slug;
}