Slack slash 命令导致来自 iOS 应用程序或 MacOS 应用程序的不同编码
Slack slash command results in different encoding coming from iOS app or MacOS App
我们有一个 Slash 命令集成,发现传递给 slash 命令的文本如果来自 (iOS) 移动应用程序与桌面应用程序,则其编码不同。
对于 MacOS 桌面应用程序上的命令“/whereis #xsd”,正文中的文本元素编码为:text=%3C%23C02MKG1LH%7Cxsd%3E
对于 iOS 应用程序中的命令“/whereis #xsd”,正文中的文本元素编码为:text=%26lt%3B%23C02MKG1LH%7Cxsd%26gt%3B
iOS 应用不正确。
还有其他人遇到过这种情况吗?有什么解决办法吗?
(我已将此问题发布到 Slack,他们不久前确认了该行为,但到目前为止还没有解决方案)。
这不是错误。两者都是有效的 HTML 编码。您可以通过在 website.
上对其进行解码来验证这一点
区别在于来自 IOS 的字符串还包含 HTML 特殊字符的编码(如 <
),但桌面字符串不包含。要解决此问题,您的应用必须首先对输入字符串进行 URL 解码,然后对特殊的 HTML 字符进行解码。
结果是:
- 桌面:<#C02MKG1LH|xsd>
- IOS:<#C02MKG1LH|xsd>
这是一个示例代码,可以正确解码 PHP 中的两个字符串:
<?php
function decodeInputString($input)
{
return htmlspecialchars_decode(urldecode($input));
}
$desktop = "%3C%23C02MKG1LH%7Cxsd%3E";
$ios = "%26lt%3B%23C02MKG1LH%7Cxsd%26gt%3B";
$desktop_plain = decodeInputString($desktop);
$ios_plain = decodeInputString($ios);
var_dump($desktop_plain);
var_dump($ios_plain);
我们有一个 Slash 命令集成,发现传递给 slash 命令的文本如果来自 (iOS) 移动应用程序与桌面应用程序,则其编码不同。
对于 MacOS 桌面应用程序上的命令“/whereis #xsd”,正文中的文本元素编码为:text=%3C%23C02MKG1LH%7Cxsd%3E
对于 iOS 应用程序中的命令“/whereis #xsd”,正文中的文本元素编码为:text=%26lt%3B%23C02MKG1LH%7Cxsd%26gt%3B
iOS 应用不正确。
还有其他人遇到过这种情况吗?有什么解决办法吗?
(我已将此问题发布到 Slack,他们不久前确认了该行为,但到目前为止还没有解决方案)。
这不是错误。两者都是有效的 HTML 编码。您可以通过在 website.
上对其进行解码来验证这一点区别在于来自 IOS 的字符串还包含 HTML 特殊字符的编码(如 <
),但桌面字符串不包含。要解决此问题,您的应用必须首先对输入字符串进行 URL 解码,然后对特殊的 HTML 字符进行解码。
结果是:
- 桌面:<#C02MKG1LH|xsd>
- IOS:<#C02MKG1LH|xsd>
这是一个示例代码,可以正确解码 PHP 中的两个字符串:
<?php
function decodeInputString($input)
{
return htmlspecialchars_decode(urldecode($input));
}
$desktop = "%3C%23C02MKG1LH%7Cxsd%3E";
$ios = "%26lt%3B%23C02MKG1LH%7Cxsd%26gt%3B";
$desktop_plain = decodeInputString($desktop);
$ios_plain = decodeInputString($ios);
var_dump($desktop_plain);
var_dump($ios_plain);