26

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

4

2 に答える 2

100
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
于 2010-01-20T18:16:47.007 に答える
3

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

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

于 2010-01-20T18:18:51.697 に答える