php – mySQL存储功能来创建一个slug

开发技术 作者: 2024-08-19 14:30:01
有没有一个 mysql存储的功能,从一个url(或任何值真的)创建一个slug. 所以我的查询可以是: SELECT *, SLUG(url) FROM clients 这是上述功能的更新版本.它更快,因为它避免循环所有允许的字符,只是通过比较ASCII代码进行检查. DROP FUNCTION IF EXISTS `slugify`; DELIMITER ;; CREATE DEFINER=`r
有没有一个 mysql存储的功能,从一个url(或任何值真的)创建一个slug.

所以我的查询可以是:

SELECT *,SLUG(url) FROM clients
这是上述功能的更新版本.它更快,因为它避免循环所有允许的字符,只是通过比较ASCII代码进行检查.
DROP FUNCTION IF EXISTS `slugify`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost`
FUNCTION `slugify`(dirty_string varchar(200))
RETURNS varchar(200) CHARSET latin1
DETERMINISTIC
BEGIN
    DECLARE x,y,z Int;
    Declare temp_string,new_string VarChar(200);
    Declare is_allowed Bool;
    Declare c,check_char VarChar(1);

    set temp_string = LOWER(dirty_string);

    Set temp_string = replace(temp_string,'&',' and ');

    Select temp_string Regexp('[^a-z0-9\-]+') into x;
    If x = 1 then
        set z = 1;
        While z <= Char_length(temp_string) Do
            Set c = Substring(temp_string,z,1);
            Set is_allowed = False;
            If !((ascii(c) = 45) or (ascii(c) >= 48 and ascii(c) <= 57) or (ascii(c) >= 97 and ascii(c) <= 122)) Then
                Set temp_string = Replace(temp_string,c,'-');
            End If;
            set z = z + 1;
        End While;
    End If;

    Select temp_string Regexp("^-|-$|'") into x;
    If x = 1 Then
        Set temp_string = Replace(temp_string,"'",'');
        Set z = Char_length(temp_string);
        Set y = Char_length(temp_string);
        Dash_check: While z > 1 Do
            If Strcmp(SubString(temp_string,-1,1),'-') = 0 Then
                Set temp_string = Substring(temp_string,1,y-1);
                Set y = y - 1;
            Else
                Leave Dash_check;
            End If;
            Set z = z - 1;
        End While;
    End If;

    Repeat
        Select temp_string Regexp("--") into x;
        If x = 1 Then
            Set temp_string = Replace(temp_string,"--","-");
        End If;
    Until x <> 1 End Repeat;

    If LOCATE('-',temp_string) = 1 Then
        Set temp_string = SUBSTRING(temp_string,2);
    End If;

    Return temp_string;
END;;
DELIMITER ;
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_64985.html
php mysql 存储 功能 创建 一个 slug