1

URLパラメーターから変数をキャッチし、それをhtml edditbaleテキストフィールドを介してJquery/Ajaxに渡し、さらにそれをFirebird DBに渡す外部phpコードに渡すphpコードがあります。問題は、jquery/ajax が ä のような文字を ä などに変更していることです。

最初に、Firebird SQl の更新を ISO8859_1 (テーブルが使用している) ビットでエンコードする必要があると考えた後、文字を変更している 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>
4

5 に答える 5

1

値をデータベースに送信する前に、php の翻訳を使用するだけでこれを解決しました。

$content2 = utf8_decode($content);

于 2012-10-15T22:51:55.983 に答える
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'); ?>

コメントの後にもう一度回答を更新してください

以下の URL を参照してください。あなたにとって非常に重要だと思います。

javascript 文字列を iso-8859-1 にトランスコードする方法

Javascript 文字列を ISO-8859-1 にトランスコードするにはどうすればよいですか?

于 2012-10-14T18:00:14.863 に答える
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'); }});
于 2012-10-15T06:44:29.157 に答える
0

jQuery.ajaxのドキュメントを読む;

デフォルトの [コンテンツ タイプ] は「application/x-www-form-urlencoded; charset=UTF-8」です。

つまり、PHP ページに投稿されるのは、UTF-8 でエンコードされた文字列です。他のもの (ISO-8859-1 など) が必要な場合は、変換する必要があります。

于 2012-10-14T17:35:00.103 に答える