IE 无法将响应标头(来自 ajax)打印为 utf8
IE cant print response header (from ajax) as utf8
我使用 PJAX 更改我网站上的页面,对于每个新页面,我都会发送带有新 a Page-Title
标头的Response Header
。此标头包含可以包含 åäö,并且 IE 错误地输出此内容。在IE的开发人员工具中,我可以毫无问题地看到Page-Title
响应,但是当我使用document.title = ...
更新标题时,它显示错误。
我的响应标头如下所示: Page-Title: Mårtensson
UTF8 已确认,我可以在 IE 和 Chrome 的开发工具中看到Content-Type: text/html; chartset=UTF-8
。
这是我更新标题的方式:
$.ajax({
url: State.url,
type: 'get',
beforeSend: function(xhr){
xhr.setRequestHeader('X-PJAX', true);
},
success: function(resp, status, xhr) {
document.title = xhr.getResponseHeader('Page-Title');
// other code
}
});
这在 Chrome 中有效,但在 IE 中它输出为 MÃ¥rtensson
.如果我使用decodeURIComponent(escape(document.title = xhr.getResponseHeader('Page-Title')));
它在IE中输出正常,但是在Chrome中我会得到Uncaught URIError: URI malformed
.
如何让它在两个浏览器中都工作?
溶液
在将其输出为响应标头之前,我通过在字符串上运行 htmlentities
来修复它。然后,我在 javascript 中解码字符串,然后再将其设置为标题。
document.title = decodeEntities(xhr.getResponseHeader('Page-Title'));
您可以查看专门处理此问题的RFC 5987。基本上,请记住,如果您在 HTTP 标头字段中使用 UTF-8 字符,则您只能靠自己,不同的浏览器将具有不同的行为。
如果您确实需要为此使用标头,则应使用某种转义(服务器端)和取消转义(客户端)来使您的游戏适合 ISO-8859-1 字符集。
- 在ajax调用中阻止来自JS对象的函数
- 在PHP中检测AJAX请求来自哪个文件
- 使用AJAX下载文件.来自SD卡
- JS对象->来自jquery ajax的JSON提交->php迭代
- jQuery SelectMenu不适用于来自AJAX调用的KNOCKOUT DATA-BINDING
- 使用来自 Ajax 响应的 JSON 数据数组
- 来自 Object 内部的 Jquery Ajax 调用立即失败
- JavaScript保存来自ajax请求的数据
- 处理来自同一页面上ajax驱动的Fancybox元素的PHP请求
- 防止来自ajax的多个请求
- 无法访问来自该函数之外的ajax请求的响应
- Ajax get jsonp给出错误代码500“;请求被阻止”;来自MVC应用程序
- Ajax使用来自PHP的信息
- 显示来自ajax json解析的数据时出现问题
- 得到"来自(127.0.0.1'33187)“;当使用$.ajax执行get请求时
- 来自 PHP 的 Dropzone debug 和 ajax 消息
- jQuery的AJAX响应来自PHP的困难
- 在脚本结束之前关闭来自 PHP 的 AJAX 请求
- 如何使用 Ajax 比较来自两个不同来源的结果
- JavaScript(带Ajax)来自PHP和输出缓冲