douhuang3833 2018-01-26 14:28
浏览 40
已采纳

PHP使用str_slug而不更改Upper Cases

Want to change text into slug using str_slug. It works perfectly for different cases, but I want it to work without changing UpperCases, i.e.

ex: Hello --- World => Hello-World

Is there a way to get what I want?

  • 写回答

2条回答 默认 最新

  • dousui6193 2018-01-26 14:38
    关注

    As stated on a question on laracasts.com you can create your own version of the helper function, that leaves out mb_strtolower():

    public static function slug($title, $separator = '-', $language = 'en')
    {
        $title = static::ascii($title, $language);
        // Convert all dashes/underscores into separator
        $flip = $separator == '-' ? '_' : '-';
        $title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
        // Replace @ with the word 'at'
        $title = str_replace('@', $separator.'at'.$separator, $title);
        // Remove all characters that are not the separator, letters, numbers, or whitespace.
    
        // With lower case: $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));
        $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', $title);
    
        // Replace all separator characters and whitespace by a single separator
        $title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);
        return trim($title, $separator);
    }
    

    Working example

    Original implementation

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?