【问题标题】:Android: mysterious escaped single quote in Uri encoded place nameAndroid:Uri编码地名中神秘的转义单引号
【发布时间】:2017-11-20 19:17:01
【问题描述】:

我使用PlaceAutocomplete 来获取一个地名,然后我对其进行url 编码并作为GET 请求的一部分发送到远程主机(在URL 中)。

在远程主机上,我发现一些用户设备正在发送转义的单引号,这会导致问题,因为地名是作为 URL 的一部分发送的。

例如“Andy's Place”作为“Andy\'s Place”发送

反斜杠 \ 是 URL 的一部分,原因很明显。

...但大多数情况下,这种情况不会发生...例如在我自己的测试设备上,它不会...这个地方被发送/接收为“Andy's Place”。

我正在尝试从头到尾遍历整个链条,以查看可能发生意外逃逸的位置。我试图总结下面的链,沿途遗漏了一些东西(例如,我不发送地点名称,我也发送其他东西)......我希望我'已经包含了所有重要的部分:

Place place = PlaceAutocomplete.getPlace(this, data);
String placeName = (String) place.getName();
EditText_placeName.setText(placeName);
// ... later ...
String newPlaceName = EditText_placeName.getText().toString();
String encodedPlaceName = Uri.encode(newPlaceName);
URL url = new URL(strBaseURL + '/' + encodedPlaceName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
responseCode = connection.getResponseCode();

上述链中是否有任何内容可能会在 某些 设备上的 URL 中引入不需要的转义字符,但在其他设备上不会?

作为一种脚注,我知道通过 POST(在正文中)而不是 GET(作为 URL 的一部分)发送数据可能会更好(可能会完全解决我的问题),确实这就是我现在正在努力的方向,但我仍然想知道\ 角色是如何通过上述链条的,至少部分出于好奇。

【问题讨论】:

    标签: android url httpurlconnection urlencode


    【解决方案1】:

    好的,我想通了,“问题”实际上发生在我原始帖子中提到的处理链之后。我将详细说明实际发生的情况,以防万一它在这种情况下对其他人有所帮助。

    \' 实际上是由于字符串在 node.js 应用程序中的记录方式而出现的。每当 node.js 应用程序中发生超时(只是偶尔发生,事实证明与\' 问题无关)时,我会停止处理并返回错误。

    出于诊断目的,我将导致超时的 URL 添加到 Error 对象(我自己创建的对象或已经存在的对象),以便我可以再次访问该 URL 以尝试重新创建问题并查看什么可能导致超时。

    比如:

    var err = new Error('oh dear');
    err.recreate = theURLString; // the URL for the request that led to the problem
    console.log(err);
    

    碰巧,当我将这个err 记录到控制台(如上)时, 是在引入\' 的时候......即@987654328 中的任何' 字符@ 输出为 \'

    所以我想这一定是Error 对象的.toString() 实现。当我执行以下操作时:

    console.log(JSON.stringify(err));
    

    ...\' 序列确实没有出现。

    甚至只是原始 URL 字符串:

    console.log(theURLString);
    

    因此,问题(例如)仅在记录阶段,而不是之前。并且 每个 请求在 URL 中都有 ' 并没有发生这种情况,仅仅是因为不是每个带有 ' 的请求都会导致超时(通常问题只是资源过载)。之前的所有东西都让我偏离了轨道。

    【讨论】:

    • 我也遇到过这个问题,我同意drmrbrewer。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2012-02-08
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多