windows-phone-8 - Windows Phone 深层链接未正确编码

标签 windows-phone-8 windows-phone deep-linking

假设我有一个能够支持 handling deep links 的 Windows Phone 应用程序。带有“我的应用程序:”绰号。给定以下示例链接:

my-app://do/stuff/?artist=Macklemore%20%26%20Ryan%20Lewis&test=1



我们可以看到两个查询字符串参数,artist = "Macklemore & Ryan Lewis"test = "1" .

如果我创建一个带有该链接的网页并在手机中打开 Internet Explorer 中的页面,这就是应用程序 UriMapper 的内容:

/Protocol?encodedLaunchUri=my-app%3A%2F%2Fdo%2Fstuff%2F%3Fartist%3DMacklemore%20%26%20Ryan%20Lewis%26test%3D1



所以,似乎没有%编码值被重新编码,但它编码了 &就在 test 之前范围…

在我看来,这似乎是一个平台错误,因为我们无法区分在 UriMapper 上获得的 & 字符!

所以问题是,是否有人知道在 Windows Phone 深层链接中使用编码 & 符号 (%26) 的方法?

最佳答案

我怀疑这个问题的级别可能太低,无法使用任何公共(public) API 访问。

作为一个起点,我想出了我们可以使用的东西(并且不需要在用户端进行更改),即检测 & 位置的能力。标志是。由此我们可以确定 &是值或查询字符串分隔符的一部分。如果是后者,我们将其替换为随机字符并在该字符上拆分。

Regex rx = new Regex(@"(\b&.*?)=");

上面的正则表达式只匹配 &紧随其后的是 = (所以它会匹配 &test= 下面但不匹配 Macklemore & Ryan Lewis )。

然后我们替换 & 的所有实例与上述正则表达式匹配的随机字符不会在其他地方使用。对于这个例子,我只使用了 | .
string mapperInput = @"Protocol?encodedLaunchUri=my-app://do/stuff/?artist=Macklemore & Ryan Lewis&test=1";

string final = rx.Replace(mapperInput, 
                       new MatchEvaluator(
                       new Func<Match, string>(x =>  x.Value.Replace('&', '|'))
                       ));

然后我们将这个结果放入一个集合中。
//skip 2 because the first two matches include the protocol section
var values = final.Split(new char[] { '?', '|' }).Skip(2).ToArray();
values数组现在包含两个元素(可以对其进行迭代并放入 Dictionary 以获得 Key-Value 访问权限)
artist=Macklemore & Ryan Lewis
test=1

这必须使用包括字符的各种输入进行测试,但从快速测试来看,它似乎工作正常。

关于windows-phone-8 - Windows Phone 深层链接未正确编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17995226/

相关文章:

ios - 在 iOS 中生成 SHA256

java - 当 Angular 应用程序托管在子目录中时,如何在 Websphere 中进行 URL 重写

android - Chrome 自定义选项卡链接不会启动应用程序,但移动 Chrome 浏览器会启动应用程序

c# - 如何在 Windows Phone 8 中使用 mp3 文件?

c# - 设置特定 Pivot Item 的内容

windows-phone-7 - 如何使用 Windows Phone SDK 在应用程序设置中创建自定义应用程序条目

ios - Universal Link 打开错误的包 ID

c# - 使用 Windows Phone 8 模拟蓝牙键盘

windows-phone-8 - 如何在 Windows Phone 中将电话号码变成可点击的链接?

c# - 设计 View Xaml 显示手机机身而不显示黑屏