在url中加载带有哈希的网站

我有一个webview,我可以在应用程序进入后台/退出时随时保存url,这样我就可以在我们的网站上保留我们的用户位置。

我将用户输入的数据存储在url中的主题标签中:

https://test.org/?page=test#user_dat1=test#user_dat2=test 

user_dat1和user_dat2跟踪用户的位置以及他们在页面上输入的内容。

当我使用以下内容时:

 NSURL *url = [NSURL URLWithString:@"https://test.org/?page=test#user_dat1=test#user_dat2=test"]; [self.mywebview loadRequest:[NSURLRequest requestWithURL:url]]; 

我明白了:

 https://test.org/?page=test%23user_dat1=test%23user_dat2=test 

哪个崩溃了我的php和js。

如何强制主题标签不被编码?

编辑: 我在标记解决方案的指导下制作的代码解决方案

 function read_hashes(){ try { // I know I shouldn't use try... but this is a easy way to reject invalid hashes var hashes = window.location.hash; hashes = hashes.substring(1); hashes = JSON.parse(decodeURIComponent(hashes)); if (hashes["user_dat1"] != null){//check if var is in json hash //do what you need to do with this var. } ... } catch(err){} } function put_hashes(){ var hashes = {}; hashes["user_dat1"] = "test data"; hashes = encodeURIComponent(JSON.stringify(hashes)); window.location.hash ="#" + hashes; } 

这允许我将变量存储在js散列中以将用户数据保存在表单中。 只是一个注释,我知道这是一个安全问题,我不会在任何会导致安全问题的页面上使用它。

不使用NSURL – 如果没有编码,这是一个无效的URL。

NSURL *url = [NSURL URLWithString:@"https://test.org/?page=test#user_dat1=test#user_dat2=test"]; 返回nil ==>显示字符串不是有效的URL

重新迭代:NSURL加载系统无法使用无效的URL。


什么使它无效是两个哈希。 编码1然后修复你的解码并发送test.org/?page=test#user_dat1=test%23user_dat2=test


操作只需要本地JS中的片段就可以了。 所以我建议在本地修复编码