Jquery AJAX在ISO8859_1中传递变量

时间:2012-10-14 17:20:46

标签: php jquery ajax firebird interbase

我有一个php代码,它从URL参数中捕获一个变量,并通过html edditbale文本字段传递给Jquery / Ajax,然后再传递给外部php代码,将其传递给我的Firebird DB。 问题是jquery / ajax正在将ä等字符改为¤等等。

首先我认为我必须使用ISO8859_1(表正在使用)对firebird SQl更新进行编码,然后我发现它正在更改字符的Jquery。

这是我的代码:

?>
    <div id="wrap">
        <h3>Comment</h3>
        <div id="status"></div>
        <div id="content">
        <div id="editable" contentEditable="true">
<?php
        echo $row[21];
        ?>
</div>  
        <button id="save">Save</button>
        </div>  
    </div>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
  <script>
    $(document).ready(function() {  
        $("#save").click(function (e) {         
            var content = $('#editable').html()
            var nr = <?php echo $s; ?>; 
            $.ajax({
                url: 'save.php',
                type: 'POST',
                data: {
                content: content,
                nr: nr
                },      
                success:function (data) {               
                    if (data == '1')
                    {
                        $("#status")
                        .addClass("success")
                        .html("Data saved successfully")
                        .fadeIn('fast')
                        .delay(3000)
                        .fadeOut('slow');   
                    }
                    else
                    {
                        $("#status")
                        .addClass("error")
                        .html("An error occured, the data could not be saved")
                        .fadeIn('fast')
                        .delay(3000)
                        .fadeOut('slow');   
                    }
                }
            });     
        });     
        $("#editable").click(function (e) {
            $("#save").show();
            e.stopPropagation();
        });
        $(document).click(function() {
            $("#save").hide();  
        });
    });
</script>

5 个答案:

答案 0 :(得分:1)

我在将值发送到db:

之前简单地使用php翻译解决了这个问题

$ content2 = utf8_decode($ content);

答案 1 :(得分:0)

阅读jQuery.ajax documentation;

  

默认[content-type]是“application / x-www-form-urlencoded; charset = UTF-8”

换句话说,您发布到PHP页面的内容是 UTF-8编码字符串。如果你想要任何其他东西(比如ISO-8859-1),你需要转换它。

答案 2 :(得分:0)

试一试

$.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'); ?>

在您发表评论后再次更新答案

见下面的网址我觉得这对你很重要。

如何将javascript字符串转码为iso-8859-1

How do I transcode a Javascript string to ISO-8859-1?

答案 3 :(得分:0)

正如Joachim Isaksson所说,你不能在UTF-8之外的另一个字符集中提交数据。

我通常在前端控制器中使用此功能来转换所有$_POST数组。

<?php
public function direct($POST)
{
          if (!empty($_POST)) {

            $flag_unicoded = false;

            if (strpos(strtolower($_SERVER['CONTENT_TYPE']), 'charset=utf-8') !== false) $flag_unicoded = true;
            if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && strpos(strtolower($_SERVER['CONTENT_TYPE']), 'charset') === false) $flag_unicoded = true;

            if ($flag_unicoded) {
              function utf8_decode_recursive($input) {
                $return = array();
                foreach ($input as $key => $val) {
                  if (is_array($val)) $return[$key] = utf8_decode_recursive($val);
                  else $return[$key] = utf8_decode($val);
                }
                return $return;          
              }
              $_POST = utf8_decode_recursive($_POST);
            }
            return $_POST;
          }
}
?>

修改

未经测试,但你可以试试这个:

jQuery.ajaxSetup({'beforeSend' : function(xhr) {xhr.overrideMimeType('charset=ISO-8859-1'); }});

答案 4 :(得分:0)

我希望这不是一个重复的答案。 我有一个jsp应用程序的这个问题。页面在iso-8859-1中,但是使用jquery.serialize(),从IE发布时数据会被破坏。 我在上面看到了Abid Hussain的建议,但改为

contentType:“application / x-www-form-urlencoded; charset = UTF-8”,

例如。告诉服务器它是UTF-8,而不是iso-8859-1 这解决了我的问题。

 $("#caleditform").submit(function(){
 $.ajax(
 {
 url:$("#caleditform").attr('action'),
 type: "POST",
 contentType: "application/x-www-form-urlencoded;charset=UTF-8",
 data: $('#caleditform').serialize(),
 success:function(html){
   $('#projectdialog').html(html);
 }
 }
 );
 return false;

});

谢谢