【问题标题】:Opening URL on Android web browser causes Google search在 Android 网络浏览器上打开 URL 会导致 Google 搜索
【发布时间】:2012-01-16 20:08:46
【问题描述】:

我在浏览器中打开某个 URL 时遇到了一点问题。首先我使用下面的代码来启动浏览器:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(Globals.currentChatURL)); 
startActivity(Intent.createChooser(browserIntent, "Select browser:"));

现在,如果我将 Globals.currentChatURL 设置为 http://www.google.com 之类的东西,那么它会很好地打开该站点。但我的 URL 有点复杂,因为它包含多个参数,这些参数都是 base64 编码的。以下是我的 URL 外观示例:

http://webportal.mysite.com/ChatProgram/chat.php? intgroup=UFYyMA==&intid=UFYyMEZN&hg=Pw__&pref=user&en=U0NPVFQgTUlMTEFS&ee=cGF1bGdAbWFnbmF0ZWNoLmNvbQ==&eq=UFRWRkVI&ec=TUFHTkFURUNI

现在,如果我使用上面的代码尝试启动此 URL,它会将我带到 Google 搜索页面,并显示以下消息:

“您的搜索 - http://URLabove ... 没有匹配任何文档”

但是,如果我复制 URL 并将其粘贴到地址框中,它会将我带到正确的位置。我怎样才能解决这个问题??这样做的重点是让用户单击按钮并启动网站,而不是让用户必须手动复制和粘贴 URL。

任何建议将不胜感激。

非常感谢

【问题讨论】:

    标签: android url browser


    【解决方案1】:

    您的 http URI 的查询部分中有不需要的等号。此类符号作为&parameter=value 形式的分隔符具有特定含义。 此等号表示来自您的 base64 编码的填充值(0、1 或 2)。

    你可以

    • 删除它们,因为您的 base64 服务器解码器不会费心重建它们,或者

    • percent encode他们(与所有其他保留字符)。

    在android中你可以这样使用百分比编码:

    String value = URLEncoder.encode("annoying values with reserved chars &=#", "utf-8");
    String url = "http://stackoverflow.com/search?q=" + value;
    

    RFC 2396 现在已弃用,但这就是 URI.parse() 所基于的,正如the documentation 所述:

    uriString 符合 RFC 2396 的编码 URI

    【讨论】:

    • 谢谢一百万。效果很好,但它已被弃用。
    猜你喜欢
    • 2011-07-31
    • 2017-10-03
    • 2013-02-06
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多