web-dev-qa-db-ja.com

PHPのURLフレンドリーなユーザー名?

私のPHPサイトでは、現在、ユーザーはメールアドレスとパスワードでログインしています。ユーザー名も追加したいと思います。このユーザー名は一意であり、変更できません。この名前にスペースを入れずにURLで機能させるにはどうすればよいのでしょうか。そのため、ユーザー名を使用してプロファイルやその他のものにリンクできます。ユーザー名にスペースがある場合は、下線jason_davisを追加する必要があります。これを行う最善の方法がわかりませんか?

24
JasonDavis
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
94
Alix Axel

言い換えれば...ユーザー名スラッグを作成する必要があります。 Doctrine(ORM for PHP)にはそれを行うための素晴らしい関数があります。 Doctrine_Inflector :: urlize()

[〜#〜] edit [〜#〜]:一意のキー列として、データベースにユーザー名スラッグも保持する必要があります。次に、すべての検索操作は、元のユーザー名ではなく、その列に基づいて実行する必要があります。

3
Crozin