60

我目前正在编写一个法语网站。有一个日程安排页面,旁边的链接可用于加载另一天的日程安排。

这是我用来执行此操作的 JS:

    <script type="text/javascript">
    function load(y) {
        $.get(y,function(d) {
            $("#replace").html(d);
            mod();
        });
    }
    function mod() {
        $("#dates a").click(function() {
            y = $(this).attr("href");
            load(y);
            return false;
        });
    }
    mod();
    </script>

实际的 AJAX 就像一个魅力。我的问题在于对请求的响应。

因为是法语网站,所以有很多重音字母。出于这个原因,我正在使用 ISO-8859-15 字符集。但是,在对我的 AJAX 请求的响应中,重音符号变为 ?,因为字符编码似乎已更改回 UTF-8。

我该如何避免这种情况?我已经尝试在请求的文档顶部添加一些 PHP 来设置字符集:

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

但这似乎也不起作用。有什么想法吗?

此外,当你们中的任何人都在看这里时......为什么在加载新页面时最右边的列似乎变小了,导致表格扭曲并且每个<li><td>换行到下一行?

干杯

4

23 回答 23

67

在 AJAX 调用上指定内容类型解决了我在挪威网站上的问题。

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
});

您还必须在服务器上指定字符集。

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
于 2009-02-16T15:04:47.060 回答
26

UTF-8 应该处理所有重音和外来字符 - 为什么不在您的数据源上使用它呢?

编辑
[测试文件的存档副本。] 与您的数据

首先,一切都应该是 UTF-8。我在 notepad++ 中加载了文件,转换为 utf-8 并手动将字符更改为重音。一旦完成,一切都会像魅力一样工作。

顺便说一句,除非您的服务器被定义为 php-process .html 文件,否则您使用 ajax 加载的文件不会获得您的 iso 字符集。如果您坚持使用 iso 字符集,请请求 php 文件而不是 html 文件,并在标题中定义字符集(而不是在文件本身中)

于 2009-02-16T14:33:50.457 回答
20
$str=iconv("windows-1250","UTF-8",$str);

最终是什么帮助了我

于 2010-01-25T07:15:06.100 回答
10

您需要将服务器设置为使用 ISO-8859-15 作为字符编码(添加适当的 HTTP 标头)。在 html 正文中执行此操作无济于事。

我可以看到这条线

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

在您的 html 的来源。这不应该发生。使用实时 HTTP 标头我看不到适当的字符集 HTTP 标头。将它用于您的第一页和 ajax 服务。

于 2009-02-16T14:53:27.930 回答
8

我强烈建议使用 javascript escape() 方法

您可以通过获取这样的表单值来将其与 jQuery 一起使用:

var encodedString = escape($("#myFormFieldID").val());
于 2010-05-11T23:42:25.933 回答
7

对于我的 PHP 应用程序,解决方案是为每个变量包含 utf8_decode 函数$_POST

例如:(服务器端)

if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){
$variable = htmlentities($_POST['variable']); // wrong
$variable = htmlentities( utf8_decode($_POST['variable']) ); // right
}

阿布拉索斯!!!(再见!!!)

于 2011-02-10T01:15:05.140 回答
6

打印出ajax文件中的变量时。放一个

htmlentities()

在他们周围,看看它是否有效。在冰岛 ajax 应用程序中为我工作。

于 2009-02-16T15:00:14.590 回答
4

我在西班牙门户网站的内容评论系统中工作时遇到了类似的问题。经过几个小时的搜索,最终解决了我的问题,而不是弄乱 jQuery 字符集,似乎无论如何都使用 utf-8,它是在处理的 PHP 中从 utf-8 解码回 ISO-8859-1 ajax POST。在 PHP 中有一个内置函数 , utf8_decode()所以我对注释字符串做的第一件事是:

$comentario = utf8_decode($_POST['comentario']);

(然后我使用nl2br()htmlentities()PHP 函数来准备要使用 html 实体而不是特殊字符存储的文本)

祝你好运与和平!塞巴

于 2010-06-03T23:15:28.273 回答
4

尽管指定了以下内容,但瑞典/挪威字母显示为问号时遇到了问题:

contentType: "application/json; charset=utf-8",

这是通过添加encodeURIComponent到字符串来解决的。

url: "/set_comment.do?text=" + encodeURIComponent(comment),
于 2012-02-26T13:24:26.537 回答
3

我一直在摆弄这个问题,发现这个解决方案适用于 Firefox 和 safari(是的,我目前在 Mac 上)。

收到请求时,我在这里做了一个 content-type=iso-8859-1 :

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
  httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1');
        }
    }

如果有人发现这在 ie 中不起作用,请告诉我。

于 2010-06-23T11:36:09.277 回答
3

我的页面也有类似的 ASP 问题。我已经解决了:

1)在Jquery ajax方法调用的ASP文件的开头插入指令:

Response.Charset = "windows-1252"

在未定义字符集之前的我的 asp 页面中,我使用 ANSI 编码保存了我的文件(使用文本编辑器作为记事本++)

2) 在使用 jquery ajax 方法调用 ASP 文件的 html 文件中,我插入了您在下面看到的参数 content-type:

$.ajax({         
data: parameters,         
type: "POST",         
url: ajax_url,
datatype: 'html',         
contentType: "text/html;charset=windows-1252",

简而言之,重要的是在您的 ASP 文件中定义称为字符集。奇怪的是,我看到我的 jquery 适用于 windows-1252 但不适用于 ISO-8859-1 字符集:在这种情况下 jquery ajax 方法给出了一个例外。

于 2011-05-15T22:01:15.360 回答
2

我尝试了许多建议来读取带有德语特殊字符(ä、ö、ü)的文本文件。到底:

 $.ajax({
        async:false,
        type: "GET",
        url: "data/FileName.txt",
        dataType: "text",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function (data) {
           alert(data);
        }
    });

让我读入特殊字符,但只有在我以 UTF-8 格式明确保存 FileName.txt 之后。在 Windows 编辑器中保存文本文件的标准格式是ANSI而不是UTF-8,但如果您“另存为”并使用保存按钮旁边的下拉框或使用更好的编辑器开始,则可以更改它。

于 2013-09-10T20:17:19.783 回答
1

我不同意一切都必须是 UTF-8,你可以让它与 ISO 8859 完美配合,我同意了,请在此处阅读我的回复。

我在stackoverflow中的回复

于 2009-08-04T18:12:10.673 回答
1
<script type="text/javascript">
  function GetContent(idUser){ 
    $.ajaxSetup({
      url: 'ping.php'
    });

    $.ajax({
      type: "POST",
      url: "blablabla.php",
      dataType: "text",
      data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
      success: function(html) {
        $('#user_specified_content').html(html);
      }
    });     
  }
</script> 

这是我从 blabla.php 页面获取内容的脚本。

当我收到关于成功的数据时,我的口音不会出现。

.success我自己找到了一个非常好的工作解决方案,用于从函数中获取带有重音的数据

在我的 blabla 页面上。我这样做是为了解决我的问题:

utf8_encode(place your data here)在我的 php 文件中使用。请参阅下面的实际操作:

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}
于 2011-06-08T17:55:49.810 回答
1

我曾尝试使用 $.ajax 读取本地 json/文本文件,但编码起初不起作用。我通过将 json 文件保存为 UTF-8 编码使其工作。这可以通过Windows记事本简单地完成。使用“另存为”,然后在文件名下方您可以将编码设置为UTF-8。

祝你好运!

于 2013-08-29T16:05:57.470 回答
0

我对以下页面有同样的问题:

  • 正常调用时显示正常
  • 通过 ajax 请求调用时特殊字符弄乱了

为了解决问题(使用php),我使用了utf8_encode()or htmlentities()on source data。两者都有效,我在不同的项目中使用过它们。

于 2009-02-16T15:13:30.657 回答
0

刚换成{"type":"GET"}{"type":"POST"}像魅力一样工作ISO-8859-1

于 2010-11-05T18:06:49.760 回答
0

如果整个应用程序使用 ISO-8859-1,您可以修改您的 jquery.js 替换所有出现的encodeURIComponentby escape(在当前 jquery 脚本中有 2 个出现要替换 - 1.5.1)

有关更多信息,请参见encodeUIComponentescape

于 2011-03-23T12:09:13.100 回答
0

我遇到了同样的问题并尝试了几种方法。我找到了解决方案。如果您为“接受”设置请求标头,如下所示;

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        dataType: 'json',
        beforeSend : function(xhr) {
            xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
        },
        success: callback
});

你会看到所有的字符看起来都是正确的

于 2012-05-21T08:02:21.643 回答
0

我提出这个问题的问题与提问者完全相同。这里的答案非常有用,我尝试了几乎每一个建议的答案。不过,这里没有一个答案对我有用——我的问题可能略有不同。许多人似乎就是这种情况。在最终得到答案之前,我尝试了很多。

所以现在我要添加到已经很长的答案列表中,我自己的解决方案解决了我的编码问题。

我只做了两件事。在我添加的数据库连接脚本中:

mysql_set_charset('utf8',$connection);

除此之外:

  • 我将所有文件的编码更改为 UTF-8

关键是一切都必须具有相同的编码。在创建新的 php 文件时,对于脚本来说,仅仅改变脚本中的编码是不够的——文件本身必须正确编码。

于 2012-07-07T18:27:23.100 回答
0

如果您使用 CodeIgniter,您可以通过在加载任何视图之前将以下代码添加到控制器来解决此问题(假设您已charset在配置中正确设置。如果没有,只需将charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));

我这样做的方法是将该行添加到 MY_Controller 的构造函数中,这是我所有控制器的超类,这样我可以确保在任何地方都不会出现编码问题。

顺便说一句,这不会影响 JSON 返回(以 UTF-8 编码)。

于 2013-08-11T15:31:04.043 回答
0

我有类似的问题。我有带有法语文本的 json 数据的文本文件。显示某些字符时总是出现问题。在我的例子中,JavaScript 程序使用 Ajax 来检索 json 文本文件,如下所示:

$.ajax({
    async: false,
    type: 'GET',
    url: 'some-url',
    success: function(data, status) {
        mainController.constructionStageMaster = data.records;
     }
});

返回的数据总是有不正确的重音法语字母。

json 文本如下所示:

{
    "records": [
        {
            "StageDesc": "Excavation, Fondation et Bases",
            "Allowed": 9,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Étanchement et Remblayage",
            "Allowed": 3,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Encadrement et revêtement mural intermédiaire",
            "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
            "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
            "Allowed": 15,
            "Completed": 0,
            "TotalCompleted": ""
        }
        ...
    ]
}

请注意,在上面的示例数据中,第 3 个元素,我放置了带有正确é和不正确ê法语重音字母的文本。

供您参考,似乎有一些使用ISO-8859-1字符编码的 Eclipse 项目的全局配置。在您的情况下,它可能是不同的编码。

在检查了上面的解决方案并玩了这个项目之后,这就是解决我的问题的方法:

  • 找到正确显示法语文本的文本来源
  • 复制文字
  • 转到 Eclipse,打开包含数据的文本文件
  • 在资源管理器中右键单击文件,打开属性,然后将编码更改为ISO-8859-1
  • 修复文本,使其正确显示。使用复制/粘贴或键盘
  • 您可能必须使用键盘箭头键(左/右)来确保没有隐藏的罪魁祸首字母会以有趣的形状显示在 HTML 上。删除这样的隐藏字母
  • 保存文件

现在,在我的例子中,我没有在 Ajax 调用中指定任何编码选项,它工作正常。另外,如果我用 json 数据更改文本文件的编码,它仍然可以正常工作。

塔雷克

于 2016-11-04T18:32:59.840 回答
0

jQuery 默认采用 UTF-8,要更改此默认值,请执行以下操作:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>
<script>
  $.ajaxSettings.mimeType="*/*; charset=ISO-8859-15";// set you charset
</script>

这对我来说很好用!... ;))...

于 2020-04-26T23:01:43.177 回答