IE无法打印响应头(来自ajax)为utf8

时间:2013-10-31 10:41:43

标签: javascript utf-8 header

我使用PJAX更改网站上的网页,而每个新网页都会发送Response Header一个新的Page-Title标头。此标头包含可以包含åäö,并且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来修复它,然后将其作为响应标头输出。在我将其设置为标题之前,我然后decode the string in javascript

document.title = decodeEntities(xhr.getResponseHeader('Page-Title'));

1 个答案:

答案 0 :(得分:0)

您可以查看专门处理此问题的RFC 5987。基本上,请记住,如果您在HTTP标头字段中使用UTF-8字符,则您自己就可以使用,不同的浏览器会有不同的行为。

如果你真的需要使用标题,你应该使用某种转义(服务器端)和unescaping(客户端)来使你的标题适合ISO-8859-1字符集。