在 OSX 上,当我尝试打开包含哈希的 URL 时#
,它会被转换为 %23 并且失败。例如,
在命令提示符下,
$ open "https://translate.google.com/#auto/en/ру́сский+язы́к"
给我一个Error 404
来自谷歌的
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
。
这是发生在我这边还是来自谷歌?我该如何让这些网址正常工作?根据这个答案它应该可以工作。
编辑:
我禁用了互联网连接,然后尝试打开上述网址,结果是一样的,#
变成了%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
答案2
本质上,问题在于它open
不是一个网络浏览器,在传递信息时无法区分两种特殊情况到浏览器:
- ( URL
#auto
片段)应按原样传递 - 其余文本必须进行 URL 编码以适应“较旧”的浏览器。
不同的浏览器可能在命令行上处理这些 URL 的方式与使用界面的方式不同。如果您在命令行上直接调用 Firefox 打开给定的 URL,它会按预期工作。
进一步阅读: