2016-07-26 229 views
1

这个函数用于创建URL蛞蝓:PHP代码字符串替换特殊字符删除字符

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

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

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

    // trim 
    $text = trim($text, '-'); 

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

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

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

    return $text; 
} 

不替换字符,如:

ľščťýžťžýéíáý

喜欢的东西:

lsctyztzyeiay

而是,它完全消除他们

所以这个字符串:

asdf 1234 3 ľščťlkiop

成为

asdf-1234-3-lkiop

代替:

asdf-1234-3-lsctlkiop

任何想法是什么导致非英文字符消失以及如何将它们转换为英文变体?

+0

这可以帮助你http://stackoverflow.com/a/2729224/4949388,否则,你可以试试这个http://stackoverflow.com/a/10064701/4949388 –

回答

1

我测试了你的功能,它似乎工作正常。
You can check here输出与您的数据。

+0

不工作。如果我做的是var_dump,我得到这个:“任何想法为什么?” –

+0

您必须将网页的编码设置为UTF-8才能正确显示特殊的非ASCII字符。在你的网页的''块中添加'''。 – Jocelyn

+0

你是对的,它在视图中起作用,但是当保存到数据库时,它会被搞乱。我将在保存到数据库之前检查一些特性或其他内容。谢谢。 –