我使用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来修正它,然后将它作为响应头输出。然后,在将其设置为标题之前,我先对其进行在javascript中解码字符串。
document.title = decodeEntities(xhr.getResponseHeader('Page-Title'));发布于 2013-10-31 10:58:29
您可以检查专门处理此问题的RFC 5987。基本上,请记住,如果您在HTTP头字段中使用UTF-8字符,那么您是独立的,不同的浏览器将有不同的行为。
如果确实需要为此使用标题,则应该使用某种类型的转义(服务器端)和取消转义(客户端)来使标题与ISO-8859-1字符集相匹配。
https://stackoverflow.com/questions/19704299
复制相似问题