Что делать со стилем URL сообщества, таким как Last.FM или Wikipedia? - PullRequest
3 голосов
/ 24 января 2010

Я пытаюсь понять, как я должен работать с символами в URLs, это потому, что я создаю сайт, где пользователь может хранить контент и переходить на страницу контента, вводя его имя в URL.

так, что-то вроде Wikipedia или Last.FM веб-сайта.

Я вижу на сайте, пользователь может написать что-то вроде<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="nofollow noreferrer">http://it.wikipedia.org/wiki/Trentemøller</a> и страница художника может дойти.

после загрузки страницы, если я скопирую URL, который я вижу, записанный как:<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="nofollow noreferrer">http://it.wikipedia.org/wiki/Trentemøller</a> но если я вставлю его в текстовый редактор, он будет вставлен как<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="nofollow noreferrer">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="nofollow noreferrer">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="nofollow noreferrer">http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2</a>

Если я цифрую первую или вторую, страница работает в любом случае, почему?

Я думаю, что я должен что-то сделать с .htacces и mod_rewrite, но яя не уверен, что специальные символы автоматически преобразуются в специальные символы url?

, а затем, как я могу разрешить PHP делать правильный запрос с именем содержимого?

, если яу меня есть таблица типа

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

Я могу с помощью mod_rewrite написать адрес, например <a href="http://mysite.com/user/bob" rel="nofollow noreferrer">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="nofollow noreferrer">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 _ + -], как быть более совместимымсо всеми символами, как у других, без потерь слишком много безопасности?

Кто-нибудь знал, как избежать неприятностей?

Ответы [ 3 ]

5 голосов
/ 25 января 2010

Попробуйте urlencode и urldecode

Редактировать:

Вот визуальное описание кодирования и декодирования URL

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

2 голосов
/ 25 января 2010

Большинство браузеров urlencode() 小林武史 до %E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2.

Что касается ваших .htaccess mod_rewrite правил, рассматривали ли вы что-то вроде:

RewriteEngine On
RewriteRule ^(user/)(.+?)[/]?$ user.php?username=$2
0 голосов
/ 25 января 2010

Насколько я понимаю, каждый URL без символов ASCII сопоставляется с уникальным URL-адресом на основе ASCII. Это на самом деле функция на стороне клиента. Пожалуйста, посмотрите: http://kmeleon.sourceforge.net/bugs/viewbug.php?bugid=631, чтобы увидеть примеры и ссылки на RFC, охватывающие этот.

...