jQuery AJAX字符编码

Sal*_*lty 57 ajax jquery character-encoding

我目前正在编写一个法国网站.有一个计划页面,侧面的链接可用于加载另一天的计划.

这是我用来做这个的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>
Run Code Online (Sandbox Code Playgroud)

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

因为它是法国网站,所以有许多重音字母.出于这个原因,我正在使用ISO-8859-15字符集.但是,在对我的AJAX请求的响应中,重音变成了?因为字符编码似乎被改回到UTF-8.

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

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

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

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

干杯

Mag*_*nar 64

在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
});
Run Code Online (Sandbox Code Playgroud)

您还必须在服务器上指定charset.

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

  • 这很奇怪,我必须在我的ajax调用(使用jquery表单插件)中放置 contentType: "application/x-www-form-urlencoded;charset=UTF-8" 来修复我的ISO-8859-1页面中的字符编码/服务器 (2认同)

yoa*_*avf 23

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

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

一切都应该是UTF-8.我在notepad ++中加载文件,转换为utf-8并手动将字符改为重音符号.一旦完成,一切都像魅力一样.

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

  • 链接已经死了. (2认同)

小智 19

$str=iconv("windows-1250","UTF-8",$str);
Run Code Online (Sandbox Code Playgroud)

什么帮助我最终


kgi*_*kis 10

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

我可以看到这一行

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

在您的HTML的源头.这不应该发生.使用Live HTTP标头我看不到相应的charset HTTP标头.将其用于第一页和ajax服务.


Dou*_*oug 7

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

你可以通过抓取像这样的表单值来使用它与jQuery:

var encodedString = escape($("#myFormFieldID").val());
Run Code Online (Sandbox Code Playgroud)


小智 7

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

例如:(服务器端)

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

Abraços!(再见!!!)


Óla*_*age 6

在ajax文件中打印出变量时.放一个

htmlentities()
Run Code Online (Sandbox Code Playgroud)

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