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?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
function Slug($string)
{
return strtolower(trim(preg_replace(\'~[^0-9a-z]+~i\', \'-\', html_entity_decode(preg_replace(\'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i\', \'$1\', htmlentities($string, ENT_QUOTES, \'UTF-8\')), ENT_QUOTES, \'UTF-8\')), \'-\'));
}
$user = \'Alix Axel\';
echo Slug($user); // alix-axel
$user = \'Álix Ãxel\';
echo Slug($user); // alix-axel
$user = \'Álix----_Ãxel!?!?\';
echo Slug($user); // alix-axel
回答2:
In other words... you need to create a username slug. Doctrine (ORM for PHP) has a nice function to do it. Doctrine_Inflector::urlize()
EDIT: You should also keep username slug in database, as a Unique Key column. Then every search operation should be done based on that column, not original username.