【问题标题】:How to pass a real plus character in string-values of JSON in the url hash fragment如何在 url 哈希片段中传递 JSON 的字符串值中的实数加号
【发布时间】:2017-04-28 23:34:51
【问题描述】:

我有一个 JS (Angular) 应用程序,它从 url 片段(在 # 井号之后)加载参数 - 并且参数包含 json 对象 - 比如

...#filters={"Course":["ST_12.+13.12.2016 [Basel]"]}

目的是打开一个数据网格并预过滤一些数据——所以这个对象是相当通用的。

麻烦的是任何像这样的字符串都会被转换成

filters=%7B%22Course%22:%5B%22ST_12.+13.12.2016+%5BBasel%5D%22%5D%7D

在目标系统中读取时被视为

...#filters={"Course":["ST_12. 13.12.2016 [Basel]"]}

所以它失去了 + 并将其变成了一个空格。显而易见的解决方案是将 + 字符编码为 %2b,例如

filters=%7B%22Course%22:%5B%22ST_12.%2B13.12.2016+%5BBasel%5D%22%5D%7D

但这失败了。在您将其输入浏览器(chrome / firefox)的那一刻, %2b 会立即在 URL 字段中直接解码回一个 + - 再次导致原始问题。

我还搜索了网络,我找到的所有答案都讨论了初学者的问题,为什么必须对空格进行 + 编码等,但这不是我关心的问题。我真的需要传递一个包含真实文本的普通字符串值,包括。 + 字符可靠。

【问题讨论】:

    标签: javascript angularjs json url single-page-application


    【解决方案1】:

    您是否尝试使用window.decodeURIComponent()?我可以使用decodeURIComponent() 对字符串进行解码,它会返回正确的格式,包括 + 和您编码的所有内容。

    【讨论】:

    • 这不起作用 - 浏览器将所有 + 和 %2b 转换为 url 中的 + - 所以在解码后它们都是空格,不再是 +
    • 您能否提供有关如何复制问题、您使用的浏览器等的更多信息?也许是 jsfiddle 上的一个例子
    • 如果您在#filters=%7B%22Course%22:%5B%22ST_12.+13.12.2016+%5BBasel%5D%22%5D%7D 上使用decodeURIComponent(),它会输出#filters={"Course":["ST_12.+13.12.2016+[Basel]"]}。我找不到/复制您的问题
    • 您的示例仅适用于控制台 - 保留 %2b 的位置。如果你把它放到通过 decodeUriComponent 运行的 url 中,散列后的 %2b 将已经被转换为一个 +,所以它失败了,因为 decodeUriComponent 看到一个 +,而不是一个 %2b,并将它变成一个空格
    猜你喜欢
    • 2017-08-10
    • 2012-04-23
    • 2012-07-24
    • 1970-01-01
    • 2022-01-16
    • 2012-03-31
    • 2012-10-25
    相关资源
    最近更新 更多