如何解决正确的方法来确保重写的URL始终能找到您期望的结果?
| 我正在尝试使用ѭ0来向用户和搜索引擎提供外观更好的URL,这在许多动态网站上都是相当普遍的做法。 因此,例如,我开始于:http://www.mydomain.com/profile/view.PHP?id=136
出于参数Bob T. Smith the 3rd
,假设调用了用户编号136(如果存在,则道歉鲍勃)。
据我了解,我的\'nasty \'URL中必须有Bob \名称的变体,因为您只能重写存在的内容-因此,我需要更改代码,以便此URL找到我们正在寻找的个人资料:
http://www.mydomain.com/profile/view.PHP?id=bob-t-smith-the-3rd
现在可以成为
http://www.mydomain.com/profile/bob-t-smith-the-3rd
我正在使用自定义函数将下划线和空格转换为破折号,去除所有非字母数字字符,然后将所有内容都小写以使URL看起来非常漂亮。
因此,在我的页面中,而不是查找非常唯一的主键\'136 \',我现在必须查找用户名-但是是经过清理的版本,所以我正在使用类似这样的东西-因为MysqL不能做正则表达式:
SELECT LOWER(REPLACE(REPLACE(REPLACE(\'Bob T. Smith the 3rd\',\" \",\"-\"),\"_\",\".\",\"\"));
该名称显然将替换为URL中包含的所有内容,并进行清理。
我期望的问题是,不想将MysqL REPLACE()函数链接在一起以处理所有可能的非法字符(这会造成混乱,难以维护,并且可能效率低下),并且无法在查询端,如何确保每次找到用户个人资料并得到返回?
如果Bob签名为\'Bob T. Smith! (The 3rd)
\'-由于would8ѭ去除感叹号和括号,我仍然会在PHP中将其清理为bob-t-smith-the-3rd
,但是我的查询-除非我添加更多的REPLACE()函数,否则\'找不到那个用户。
我是否应该确保用户只能使用A-Z,0-9,破折号和下划线进行注册?
我是否应该以某种方式继续传递唯一的数字ID,而只是以某种方式从重写规则中忽略它?
我是否完全忘记了要点?有没有我想到过的公认方法?
谢谢 :-)
解决方法
如果我丢失了某些内容,请纠正我,但是为什么不调用php脚本时将用户名从重写规则中添加的破折号中删除呢?
$undashed_username = explode(\"-\",$dashed_username);
$username = implode(\" \",$undashed_username);
然后您可以在数据库中进行搜索。
, 您为什么不发出此请求?
http://www.mydomain.com/profile/bob-t-smith-the-3rd?id=136
因此,您拥有一个不错的URL,并且不需要处理实际搜索用户名的情况。
如果您担心网址中包含“ 11”,也可以执行以下操作:
http://www.mydomain.com/profile/136/bob-t-smith-the-3rd
然后解析请求字符串中的数字信息。
这也将减少数据库的工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。