Я пытаюсь понять, как мне работать с символами в URLs
, потому что я создаю сайт, на котором пользователь может хранить контент и перейти на страницу контента, указав его имя в URL
.
поэтому, что-то вроде Wikipedia
или сайта Last.FM
Я вижу на сайте, пользователь может написать что-то вроде
http://it.wikipedia.org/wiki/Trentemøller
и страница художника может быть достигнута.
после загрузки страницы, если я скопирую URL-адрес, который я вижу как:
http://it.wikipedia.org/wiki/Trentemøller
но если я вставляю его в текстовый редактор, он будет вставлен как
http://it.wikipedia.org/wiki/Trentem%C3%B8ller
поэтому char ø
вставляется как %C3%B8
конечно же, для URL-адресов, подобных этому (страница художника Такеши Кобаяси)
http://www.last.fm/music/小林武史
http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2
Если я цифра первая или вторая, страница работает в любом случае, почему?
Я думаю, что я должен что-то сделать с помощью .htacces
и mod_rewrite
но я не уверен, что специальные символы автоматически преобразуются в специальные символы url?
и затем, как я могу сделать, чтобы PHP сделал правильный запрос с именем содержимого?
если у меня есть таблица вроде
table_users - username - age - height - weight - sex - email - country
Я могу с mod_rewrite
написать адрес, например http://mysite.com/user/bob
чтобы получить username
bob из table_users
но как насчет http://mysite.com/user/小林武史
?
здесь я показываю простой пример того, что я думаю делать:
#.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()
小林武史
до %E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2
.
Регламентируя свои правила .htaccess
mod_rewrite
, вы считали, что используете что-то вроде:
RewriteEngine On RewriteRule ^(user/)(.+?)[/]?$ user.php?username=$2
Попробуйте urlencode и urldecode
Редактировать :
Вот Visualy Описание кодирования и декодирования URL
http://blog.neraliu.com/wp-content/uploads/2009/10/url-encoding.png
Насколько я понимаю, каждый URL-адрес с не ASCII-символами сопоставляется с уникальным URL-адресом на основе ASCII. Это на самом деле функция на стороне клиента. Посмотрите на: http://kmeleon.sourceforge.net/bugs/viewbug.php?bugid=631, чтобы увидеть примеры и ссылки на RFC, охватывающие этот.