Nombre de usuario amigable URL en PHP?


En mi sitio PHP, actualmente los usuarios inician sesión con una dirección de correo electrónico y una contraseña. Me gustaría añadir un nombre de usuario también, este nombre de usuario que g \ set será único y no pueden cambiarlo. Me pregunto cómo puedo hacer que este nombre no tenga espacios y trabajar en una URL para poder usar el nombre de usuario para enlazar a los perfiles y otras cosas. Si hay un espacio en el nombre de usuario entonces debe añadir un guion bajo jason_davis. No estoy seguro de la mejor manera de hacer esto?

Author: Alix Axel, 2010-01-20

2 answers

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
 91
Author: Alix Axel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-14 10:01:13

En otras palabras... necesitas crear un nombre de usuario slug. Doctrine (Doctrine para PHP) tiene una buena función para hacerlo. Doctrine_Inflector:: urlize()

EDITAR : También debe mantener el nombre de usuario slug en la base de datos, como una columna de clave Única. Luego, cada operación de búsqueda debe realizarse en base a esa columna, no al nombre de usuario original.

 3
Author: Crozin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-20 18:18:51