Search code examples
phpstringfriendly-urlslug

URL Friendly Username in PHP?


On my PHP site, currently users login with an email address and a password. I would like to add a username as well, this username they g\set will be unique and they cannot change it. I am wondering how I can make this name have no spaces in it and work in a URL so I can use there username to link to there profiles and other stuff. If there is a space in there username then it should add an underscore jason_davis. I am not sure the best way to do this?


Solution

  • function Slug($string)
    {
        // convert to entities
        $string = htmlentities( $string, ENT_QUOTES, 'UTF-8' );
        // regex to convert accented chars into their closest a-z ASCII equivelent
        $string = preg_replace( '~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', $string );
        // convert back from entities
        $string = html_entity_decode( $string, ENT_QUOTES, 'UTF-8' );
        // any straggling caracters that are not strict alphanumeric are replaced with a dash
        $string = preg_replace( '~[^0-9a-z]+~i', '-', $string );
        // trim / cleanup / all lowercase
        $string = trim( $string, '-' );
        $string = strtolower( $string );
        return $string;
    }
    
    $user = 'Alix Axel';
    echo Slug($user); // alix-axel
    
    $user = 'Álix Ãxel';
    echo Slug($user); // alix-axel
    
    $user = 'Álix----_Ãxel!?!?';
    echo Slug($user); // alix-axel