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


当前回答

我认为最优雅的方法是使用Behat\Transliterator\Transliterator。

我需要通过你的类扩展这个类,因为它是一个抽象,一些像这样:

<?php
use Behat\Transliterator\Transliterator;

class Urlizer extends Transliterator
{
}

然后,使用它:

$text = "Master Ápiu";
$urlizer = new Urlizer();
$slug = $urlizer->transliterate($slug, "-");
echo $slug; // master-apiu

当然你也应该把这些东西放到你的作曲器里。

composer require behat/transliterator

更多信息请点击这里https://github.com/Behat/Transliterator

其他回答

因为我在这里看到了很多方法,但我为自己找到了一个最简单的方法。也许它会帮助别人。

$slug = strtolower(preg_replace('/[^a-zA-Z0-9\-]/', '',preg_replace('/\s+/', '-', $string) ));

你可以看看Normalizer::normalize(),看这里。它只需要加载PHP的intl模块

下面是制作鼻涕虫的简单方法

function convertURLs($value){
$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', $value))))), $delimiter));
return $slug;}

如果使用Core中已经实现的东西呢?

//Clean non UTF-8 characters    
Mage::getHelper('core/string')->cleanString($str)

或者核心url/ url重写方法之一..

对于标准的字母数字英语-没有复杂。

/**
 * Update the provided string to a slug-safe format.
 *
 * @param string $string
 * @return string
 */
function slugify($string)
{
    return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string), '-'));
}