php - 如何处理像 Last.FM 或维基百科这样的社区 URL 样式?

标签 php mysql url url-rewriting

我想了解我应该如何处理 URLs 中的字符,这是因为我正在构建一个网站,用户可以在其中存储内容并通过在 URL 中将其名称数字化来转到内容页面。 .

所以,类似于 WikipediaLast.FM网站。

我在网站上看到,用户可以这样写
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentemøller</a>并且可以到达艺术家的页面。

页面加载后,如果我复制 URL,我会看到写成:
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentemøller</a>但如果我将它粘贴到文本编辑器中,它将被粘贴为
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentem%C3%B8ller</a>

所以字符 ø粘贴为 %C3%B8

当然对于这样的URL也是一样的(画师小林武的页面)

<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://www.last.fm/music/小林武史</a>
<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2</a>

如果我对第一个或第二个数字进行数字化,该页面在任何情况下都可以正常工作,为什么?

我想我应该对 .htacces 做些什么和 mod_rewrite但我不确定,特殊字符是否自动转换为 url 特殊字符?

然后,我该怎么做才能让 PHP 对内容名称进行正确的查询?

如果我有一张像这样的 table

table_users
- username
- age
- height
- weight
- sex
- email
- country

我可以 mod_rewrite写一个像 <a href="http://mysite.com/user/bob" rel="noreferrer noopener nofollow">http://mysite.com/user/bob</a> 这样的地址得到username鲍勃来自 table_users但是<a href="http://mysite.com/user/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://mysite.com/user/小林武史</a>呢? ?

这里我展示了一个我想做的简单例子:

#.htaccess
RewriteEngine On
RewriteRule ^(user/)([a-zA-Z0-9_+-]+)([/]?)$ user.php?username=$2

<?php
// this is the page user.php
// this is the way I use to get the url value
print $_REQUEST["username"];
?>

这行得通,但它仅限于 [a-zA-Z0-9_+-],如何像其他字符一样与所有字符更兼容而又不会损失太多安全性?

有人知道避免麻烦的方法吗?

最佳答案

试试 urlencode 和 urldecode

编辑:

下面是url编解码的直观描述

http://blog.neraliu.com/wp-content/uploads/2009/10/url-encoding.png

关于php - 如何处理像 Last.FM 或维基百科这样的社区 URL 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128756/

相关文章:

php - 选择日期时间不起作用的查询

mysql - Sql 查询以升序降序顺序选择数据,并在字符串中查找数字

php - 从一种表单插入多个表(mysql 和 PHP)

javascript - 如果在部分 URL 中

javascript - 使用 jQuery 发送多个变量

php - 如何使用 mysql 对最近的数据进行排序以及计数

php - 用 CSS 居中文本 div?

mysql - Django 中的外键约束错误

url - 限制我的移动应用程序访问云端签名 URL(GET 请求)

c# - url 中带有子目录的 Response.Redirect