首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用特殊字符时,服务器响应会奇怪地被en-/解码。

问当使用特殊字符时,服务器响应会奇怪地被en-/解码。
EN

Stack Overflow用户
提问于 2016-11-25 13:09:07
回答 1查看 132关注 0票数 1

作为前端和AJAX,我使用的是Ext,遇到了以下问题:

我正在上传一个文件,该文件将被上传到后端,后端将在存储库中使用相应的文件路径回答,包括一些元数据。整个答案是HTML结构中的JSON。(这需要完成,因为Ext文件上传会创建隐藏的iFrame,否则iFrame的域与浏览器不同)

后端在响应中使用以下路径进行响应:

代码语言:javascript
复制
/documents/test/uploadTesthtml_ü_&/uploadTesthtml_ü_&.jpg

在网络面板中,路径是正确的。但是,一旦成功处理程序启动,响应就包含以下路径:

代码语言:javascript
复制
/documents/test/uploadTesthtml_ü_&/html_ü_&.jpg

我明白,当您还没有看到它的生命时,这是相当令人费解的,但是我们需要为这个特定的用例做好准备,我希望您能够遵循我的解释。

编辑回复@Alexander的评论:

我们使用Java后端,并围绕JSON响应使用以下HTML结构:

代码语言:javascript
复制
<html>
    <head>
        <script>
            function doDomainRelaxing() {
                var x = location.hostname.indexOf('.') + 1;
                if (x > 0)
                    document.domain = location.hostname.substring(x);
            }
            doDomainRelaxing();
        </script>
    </head>
    <body>
        [{...}] //JSON response
    </body>
</html>

据我所知,这样做的原因是,ExtJS使用隐藏的iFrame进行文件上传,这将从服务器接收响应,然后从iFrame获取响应以伪造response.responseText。我们的浏览器弹出的域变得轻松了,但是iFrame的域没有,因此我们遇到了相同的起源策略的问题,并且response.responseText是空的。为了解决这个问题,我们还使用了上述的HTML包装器来放松iFrame的域。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-28 15:42:15

造成问题的原因是响应周围的HTML包装器以及将JSON写入包装器的方式。

最初,JSON直接写入正文内的HTML,这导致浏览器将内容解释为HTML,因此&uuml;在iFrame HTML中被解码为ü。之后,当ExtJS从隐藏的iFrame获取响应时,它被编码了,但只有&而不是ü。解决方案是在主体通过JS呈现之后添加JSON响应。

代码语言:javascript
复制
<html>
    <head>
        <script>
            function doDomainRelaxing() {
                var x = location.hostname.indexOf('.') + 1;
                if (x > 0)
                    document.domain = location.hostname.substring(x);
            }
            doDomainRelaxing();
        </script>
    </head>
    <body>
        <script>
            document.body.innerText = [{...}] //JSON response
        </script>
    </body>
</html>

之后,我不得不在成功处理程序中使用Ext.htmlDecode(response.responseText);来解码响应中的&amp;。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40805836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档