gpt4 book ai didi

Android:Uri编码地名中的神秘转义单引号

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:22 25 4
gpt4 key购买 nike

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

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

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

和反斜杠 \ 出于明显的原因在 URL 的一部分时是一个问题。

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

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

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 的一部分)发送数据可能是更好(可能会完全解决我的问题),这确实是我现在正在朝着的方向发展,但我仍然想知道 \ 字符是如何通过上述链的,至少部分出于好奇。

最佳答案

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

\' 实际上是由于在 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 记录到控制台(如上)时,that 是引入 \' 的时间。 .. 即 theURLString 中的任何 ' 字符都显示为 \'

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

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

...\' 序列出现。

甚至只是原始 URL 字符串:

console.log(theURLString);

因此,问题(实际上是这样)仅出现在日志记录阶段,而不是之前。它并没有发生在 URL 中包含 '每个 请求中,只是因为并非每个包含 ' 的请求都会导致超时(通常是问题只是资源过载)。之前的所有事情都让我偏离了轨道。

关于Android:Uri编码地名中的神秘转义单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44615885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com