PHP中的URL友好用户名?

Posted

技术标签:

【中文标题】PHP中的URL友好用户名?【英文标题】:URL Friendly Username in PHP? 【发布时间】:2011-01-07 09:49:33 【问题描述】:

在我的 php 站点上,当前用户使用电子邮件地址和密码登录。我还想添加一个用户名,他们 g\set 的这个用户名将是唯一的,他们无法更改它。我想知道如何使这个名称中没有空格并在 URL 中工作,这样我就可以使用那里的用户名链接到那里的个人资料和其他东西。如果用户名中有空格,则应添加下划线 jason_davis。我不确定执行此操作的最佳方法?

【问题讨论】:

这样的问题很多。您没有通过搜索得到答案吗? @Gumbo 我搜索了 SO,而不是谷歌。可能不是正确的术语,但我确实搜索了“URL 友好的用户名”,但运气不佳。在此之前我不知道它被称为蛞蝓。 也许不是每个人都在尝试转换用户名。但是搜索“URL 友好字符串”会返回可用的结果。 类似:***.com/questions/5305879 现在,您可以使用 github.com/cocur/slugify 或 github.com/ausi/slug-generator 等库来实现这一目标。 【参考方案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

【讨论】:

这很危险!多个唯一用户名可以映射到同一个 URL。这不是你想要的,不是吗?例如,考虑ABab,它们是唯一的字符串,但映射到相同的 slug 字符串。您应该将 slug 存储为标识符。 @John Feminella:他显然必须在存储 slug 之前的某个时间点检查重复项。 有人知道为什么 Á 和 Ã 在使用这个函数时会导致没有输出或错误发生吗? 亚历克斯,感谢您提供的信息。我重新输入了“UTF-8”参数并将文件保存为 UTF-8,它就像一个魅力。 Slug() 函数的键盘演示,第二个相同但间隔开的 nSlug() 函数(针对眼球受损):codepad.org/rJNSQmGJ【参考方案2】:

换句话说...您需要创建一个用户名 slug。 Doctrine(ORM for PHP)有一个很好的功能来做到这一点。 Doctrine_Inflector::urlize()

编辑:您还应该将用户名 slug 作为唯一键列保留在数据库中。那么每个搜索操作都应该基于该列,而不是原始用户名。

【讨论】:

以上是关于PHP中的URL友好用户名?的主要内容,如果未能解决你的问题,请参考以下文章

用户友好的 URL - mod_rewrite 和 php 重定向

创建用户友好 URL 的技术 [重复]

从 php 和 sql 创建动态自动递增的 seo 友好 url

友好的 URL 并允许用户控制它们

带有 java 脚本的 MVC 中的用户友好 URL

PHP路由技术的原理与实践