如何通过jQueryMobile 1.3.1中的AJAX加载带有正确字符编码的ISO-8859-1内容?

mal*_*kan 1 jquery encoding jquery-mobile

我有一个生成ISO-8859-1内容的PHP脚本(CMS)(在后台还有一个带有Latin1数据的数据库).为了可视化移动设备上的数据,我使用jQuery Mobile 1.3.1.通常,如果在HTML中使用正确的元标记,则字符编码没有问题:

<meta charset="iso-8859-1" />
Run Code Online (Sandbox Code Playgroud)

但是jQuery Mobile有这个默认设置:

$.mobile.ajaxEnabled = true;
Run Code Online (Sandbox Code Playgroud)

因此,jQuery Mobile将尽可能自动处理链接点击并通过Ajax形成提交.

这是一个非常聪明的功能,但它会摧毁一些特殊的角色,如德国的变形金刚,你会得到这个令人讨厌的角色:

mal*_*kan 8

问题是jQuery Mobile 1.3.1在ajax请求上使用默认的UTF-8.有不同的解决方案来解决这个问题:

  1. 禁用特定链接的Ajax,该链接重定向到包含特殊字符的内容:

    data-ajax="false"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 完全关闭ajax预加载功能:

    $.mobile.ajaxEnabled = false;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 请遵循此建议并手动设置正确的内容类型并覆盖mime类型:

    $.ajaxSetup({
      contentType: 'application/x-www-form-urlencoded; charset=ISO-8859-1',
      beforeSend: function(jqXHR) {
        jqXHR.overrideMimeType('application/x-www-form-urlencoded; charset=ISO-8859-1');
      }
    });
    
    Run Code Online (Sandbox Code Playgroud)

最后的解决方案对我有用.