Открытие URL-адреса Google с помощью хэша (#) не выполняется; конвертируется в%23
На OSX, когда я пытаюсь открыть URL, который содержит хэш #
, он преобразуется в%23 и не удается. Например,
Из командной строки
$ open "https://translate.google.com/#auto/en/ру́сский+язы́к"
дает мне Error 404
от Google
The requested URL /%23auto/en/%D1%80%D1%83%CC%81%D1%81%D1%81%D0%BA%D0%B8%D0%B9+%D1%8F%D0%B7%D1%8B%CC%81%D0%BA was not found on this server. That’s all we know.
То же самое происходит и с Applescript, когда я использую open location
команда.
Это происходит на моем конце или от Google? Как я могу заставить эти URL работать? Согласно этому ответу это должно работать.
РЕДАКТИРОВАТЬ:
Я отключил свое интернет-соединение, а затем попытался открыть вышеуказанный URL, и результаты были такими же, #
был превращен в %23
, Также пробовал Chrome, я использовал Firefox, и результат тот же. Таким образом, изменение происходит самим OSX.
Кстати, если вы скопируете и вставите вышеприведенное в свой браузер, все будет работать нормально, поэтому URL-адрес в порядке.
Наконец, я использую Snow Leopard (10.6.8)
Решено: согласно ответу ниже строка запроса должна быть закодирована. Один вкладыш в этом ответе помог,
/bin/echo -n "some foreign text" | php -r "echo urlencode(file_get_contents('php://stdin'));"
2 ответа
Вы написали "русский + язык".
В переводе на русский язык используются специальные символы. Специальные символы в URL кодируются как "%??" эквиваленты в качестве ссылки для этих символов.
Я искал это для вас, чтобы вы могли видеть: http://www.w3schools.com/tags/ref_urlencode.asp.
URL не знает, что такое специальный символ. Ты программируешь? Если это так, то вам нужно найти равноценный способ перекодировки ваших символов в нечто, что может распознать URL.
Вот онлайн-декодер для дальнейшего изучения, относящийся к специальным символам: http://www.asiteaboutnothing.net/c_decode-url.html
По сути, проблема в том, что open
не является веб-браузером и не может различить два особых случая, поскольку он передает информацию в браузер:
#auto
(Фрагмент URL) должен быть передан как есть- другой текст должен быть в кодировке URL для размещения "старых" браузеров.
Различные браузеры могут по- разному обрабатывать эти URL-адреса в командной строке и использовать их интерфейс. Если вы откроете указанный URL-адрес в командной строке, непосредственно вызывая Firefox, он будет работать как положено.
Дальнейшее чтение: