我使用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'));
答案 0 :(得分:0)
您可以查看专门处理此问题的RFC 5987。基本上,请记住,如果您在HTTP标头字段中使用UTF-8字符,则您自己就可以使用,不同的浏览器会有不同的行为。
如果你真的需要使用标题,你应该使用某种转义(服务器端)和unescaping(客户端)来使你的标题适合ISO-8859-1字符集。