Перезапись URL - международные буквы

Как мне форматировать URL-адреса со специальными/международными символами?

В настоящее время я стараюсь, чтобы URL-адреса «выглядели хорошо», чтобы:

www.myhost.com/this is a test, do you know how?

преобразуется в:

www.myhost.com/this_is_a_test_do_you_know_how

Я знаю, что некоторые международные буквы могут быть преобразованы (ü = ue, æ = ae, å = aa), некоторые символы могут быть удалены. Обычно я стараюсь, чтобы URL-адрес выглядел «хорошо», но разве это глупо?

Но что мне делать с китайскими, японскими, арабскими буквами, которые не имеют ничего общего с нашим западным форматом ASCII?

Мне действительно не нравится идея переписывать URL-адрес с помощью шестнадцатеричных кодов, поэтому сейчас я просто использую свой внутренний уникальный идентификатор, если URL-адрес содержит слишком много «неконвертируемых» символов.


person Community    schedule 16.10.2008    source источник


Ответы (4)


Какой язык вы используете? PHP включает функцию filter_var(), которая делает почти все, что вам нужно. См. http://us.php.net/manual/en/function.filter-var.php.

В общем, стоимость создания удобочитаемых строк ASCII из произвольного ввода строк, вероятно, слишком велика, чтобы того стоить. Если пользователь даст вам китайскую ханзи, что вы будете делать? Посмотреть в словаре и вывести результат в пиньине?

Лучшее и наиболее общее решение — просто взять ввод, отформатировать его как UTF-8, а затем закодировать результат в URL-адресе. Это сделает нелатинский текст нечитаемым, но в любом случае для этих языков нет хорошего общего решения. Язык, который вы используете, почти наверняка имеет библиотечные функции, которые упростят эту задачу.

person JSBձոգչ    schedule 16.10.2008

Но разве Google не использует URL? Если какой-то текст из данной статьи находится в URL-адресе, поисковая система Google будет его использовать? Но если на самом деле нет классного способа обработки букв, отличных от ascii, то эти языки имеют более низкий приоритет в «google-internet?»

person Community    schedule 16.10.2008

Взгляните, скажем, на http://ja.wikipedia.org/ . Если навести указатель мыши на ссылки, они отобразятся в строке состояния в виде японских символов. Не выглядит так по-японски в адресной строке, когда вы переходите по ссылке, но, возможно, ничего не поделаешь. Не проверял, но я предполагаю, что это все в шестнадцатеричном кодировании utf8.

person Community    schedule 16.10.2008
comment
Да, это возможно, но на мой взгляд очень ПЛОХАЯ идея. Я сталкивался с этим иногда, и знаете что? У меня были проблемы, потому что у меня не было подходящей клавиатуры на компьютере, который я использовал в то время! - person Davide; 16.10.2008
comment
Не уверен, что понимаю. Какие проблемы были у вас, и как повлияла клавиатура? Насколько я понимаю, текст html полностью написан символами ASCII, а браузер интерпретирует и отображает закодированные символы, отличные от ascii, если может, поэтому клавиатура не должна вводить его. - person ; 16.10.2008
comment
да, джа. сайт просто работает с японскими буквами, не беспокоясь о буквах ascii. - person ; 17.10.2008

если вы используете .NET без

Server.URLEncode( myURL );

но если вы хотите использовать скандинавские символы или любые другие символы, вам просто нужно настроить правило в компоненте перезаписи URL-адресов, потому что DynamicWebCMS использует все доступные символы, пробелы заменяются только символами подчеркивания ('_')

как этот URL:

http://www.gynækologen.dk/Undersøgelser_og_behandlinger.aspx

вы можете увидеть æ в домене, а также ø в имени страницы

person balexandre    schedule 16.10.2008
comment
да, я думал об этом, но опять же, вы не можете просто вставить URL-адрес на какой-то сайт, который его не поддерживает. Например: validator.w3.org/ И привет тебе, balexandre, я тоже датчанин :) - person ; 17.10.2008
comment
ааа похоже это просто имя хоста - person ; 17.10.2008