Открытие URL-адреса Google с помощью хэша (#) не выполняется; конвертируется в% 23

2

В 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'));"
Чувак по имени Бен
источник

Ответы:

1

Вы написали "русский + язык".

В переводе на русский язык используются специальные символы. Специальные символы в URL кодируются как "% ??" эквиваленты в качестве ссылки для этих символов.

Я искал это для вас, чтобы вы могли видеть: http://www.w3schools.com/tags/ref_urlencode.asp .

URL не знает, что такое специальный символ. Ты программируешь? Если это так, то вам нужно найти равноценный способ перекодировки ваших символов в нечто, что может распознать URL.

Вот онлайн-декодер для дальнейшего изучения, относящийся к специальным символам: http://www.asiteaboutnothing.net/c_decode-url.html

ejbytes
источник
Когда я увидел ответ Google, я скопировал и вставил его закодированную строку, но она все равно не удалась, поэтому я больше не смотрел на нее. После проверки ссылки w3schools в вашем ответе я попробовал еще раз, и это сработало! Так что теперь с помощью php one liner ссылки работают. Спасибо.
Чувак по имени Бен
Рад, что смог помочь. Я думал, что это может быть PHP, я столкнулся с той же проблемой пару лет назад.
ejbytes
1

По сути, проблема в том, что openэто не веб-браузер, и он не может различить два особых случая, когда он передает информацию в браузер:

  • #auto(фрагмент URL) , должен быть принят как есть
  • другой текст должен быть в кодировке URL для размещения «старых» браузеров.

Различные браузеры могут по- разному обрабатывать эти URL-адреса в командной строке и использовать их интерфейс. Если вы откроете указанный URL-адрес в командной строке, непосредственно вызывая Firefox, он будет работать как положено.

Дальнейшее чтение:

Томас Дики
источник
Я понимаю, что open это не браузер. Что меня смутило, так это то, что он передал строку правильно, или мне показалось, что я не слишком много смотрел на кодирующую часть. Что касается устаревшего браузера, я использую последние версии Chrome и Firefox, поэтому здесь нет никаких проблем. Ваш ответ был полезен тем, что помог мне сосредоточиться на кодировании текстовой строки и игнорировать #. Спасибо.
Чувак по имени Бен