字符串中的Hashtag中断JavaScript

字符串中的Hashtag中断JavaScript,javascript,string,hashtag,Javascript,String,Hashtag,我正在尝试使用JavaScript将字符串保存到外部文件。下面是我正在执行的 var mytext = "1111#1111" var a = document.body.appendChild(document.createElement("a")); a.download = "My_output.html"; a.href = "data:text/html," + mytext; a.click(); 这段代码在使用Chrome时非常有效。但是对于Firefox,它会在“#”之前停

我正在尝试使用JavaScript将字符串保存到外部文件。下面是我正在执行的

var mytext = "1111#1111"
var a = document.body.appendChild(document.createElement("a"));
a.download = "My_output.html"; 
a.href = "data:text/html," + mytext; 
a.click();
这段代码在使用Chrome时非常有效。但是对于Firefox,它会在“#”之前停止。当我查看结果输出文件时,我看到以下内容:

铬的结果如下所示
1111#1111

Firefox中的结果如下所示
1111

在我看来,标签好像在破坏什么东西。有人能帮我理解为什么字符串中的“#”会在Firefox中引起悲伤,而不是在Chrome中?我尝试过将字符串用双引号和单引号括起来,但似乎没有任何效果


有什么想法吗?

您需要在提交字符串之前将URL编码添加到字符串中

var mytext = encodeURIComponent( "1111#1111" );
var a = document.body.appendChild(document.createElement("a"));
a.download = "My_output.html"; 
a.href = "data:text/html," + mytext; 
a.click();
更多信息可在此处找到:

编辑:顺便说一句,这只是我的问题,但为什么你还要做数据:text/html?只是看起来没必要


您也可以通过Ajax轻松地提交此文件(如果您有可用的库,也可以使用jQuery的$.Ajax)。如果您碰巧使用jQuery,那么所有这些都可能会简单一些。不管怎样,希望这能有所帮助。

如果我在firefox中使用它,效果会很好

var mytext = encodeURIComponent("1111#1111");
var a = document.body.appendChild(document.createElement("a"));
a.download = "My_output.html"; 
a.href = "data:text/html," + mytext; 
a.click();
诀窍是一如既往地对uri组件进行编码。您要传递的是本质上的uri组件


这样所有的特殊角色都像?#和+和%将被正确解析。

您尝试过encodeURIComponent(“#”)吗?只是为了记录,我来到这里是为了一个不同的情况,但相同的字符串由于#而中断,我打开一个模式/弹出窗口向用户显示一些额外的信息,在查询字符串中传递了#,我知道我所做的不是最好的解决方案,除非,你知道其他符号没有被使用。。。所以我替换了#for^,然后在弹出窗口中替换了#for#。。。作品并能快速响应编辑。。这样用户就可以下载html内容。。。因此,他可以动态生成一个html文件供用户下载,例如收据等,而无需提供实际的下载文件。谢谢你这么做了。像冠军一样工作。非常感谢。