我想知道是否有一个简单的函数/代码可以处理从给定字符串创建一个slug。
我正在使用多语言网站(英语,西班牙语和阿拉伯语),我不确定如何处理西班牙语和阿拉伯语。
我目前正在使用CSS-Tricks的以下代码,但它不适用于UTF-8文本。
<?php
function create_slug($string){
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
echo create_slug('does this thing work or not');
//returns 'does-this-thing-work-or-not'
?>
答案 0 :(得分:1)
我为此目的创建了库ausi/slug-generator。
它使用PHP Intl扩展,在不同脚本之间进行转换,这些脚本本身基于Unicode CLDR的数据。这种方式适用于多种语言。
您可以像这样使用它:
<?php
$generator = new SlugGenerator;
$generator->generate('English language!');
// Result: english-language
$generator->generate('Idioma español!');
// Result: idioma-espanol
$generator->generate('لغة عربية');
// Result: lght-rbyt
答案 1 :(得分:1)
如果您想使用相同的文本而不进行翻译
function slug($str, $limit = null) {
if ($limit) {
$str = mb_substr($str, 0, $limit, "utf-8");
}
$text = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
return $text;
}
通过:Walid Karray