0


文字セットに問題があり、解決策を見つけるために夢中になっています。これは私が持っているものです:

  • データベース、テーブル、および各フィールドの照合として「latin1_spanish_ci」を使用したMySQLデータベースがあります。
  • ヘッダー '<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">' を持つ html ファイルで、フォームがあります。ボタンが押されると、PHP に POST リクエストを送信する Ajax が呼び出されます。
  • 'header('Content-type: text/html; charset=iso-8859-1');' を呼び出した PHP 頂点で。この PHP はデータベースに対してクエリを実行し、データのリストを取得します。
  • AJAX 呼び出しは次のとおりです。

    $.ajax({ url:"llistat.php", type: "POST", data: { セクター: $("#sector").val(), cp: $("#cp").val(),州: $("#province").val(), 無料: $("#free").val() }, 成功: 関数(データ) { $("#results").html(""); $("#results").append(data); }, contentType: "application/x-www-form-urlencoded; charset=iso-8859-1" });

問題...

  1. PHP に charset ヘッダーを保持すると、文字はデータベースから適切に取得されますが、AJAX 呼び出しを介して送信された「離れた」文字 (アクセント、「ñ」、...) は適切に取得されません。
  2. charset ヘッダーを削除すると、同じ問題が発生しますが、その逆です。呼び出しからの文字は適切に取得されますが、データベースからの文字は取得されません。
  3. 最後に、Ajax 呼び出しを介して呼び出しを行わず、フォームを直接送信すると、すべてが適切に機能します。文字は適切に送信され、データベースからの情報も送信されます。

このすべてのプロセスの何が問題になっていますか? (最後のポイントによると) AJAX 呼び出しによる呼び出しとフォームの送信による呼び出しには違いがあると思います。しかし、その違いは何ですか?私は何を間違っていますか?

ありがとう。

4

1 に答える 1

1

$.ajaxencodeURIComponent常に UTF-8 を使用するusesを使用します。プロセスの問題点は、どこでも UTF-8 を使用していないことです。

今までにその事実を変更できない場合はmb_convert_encoding、サーバー側で ajax データを UTF-8 から Windows-1252 に変換できます。

ご了承ください:

  • ブラウザにとって ISO-8859-1 は Windows-1252 を意味します
  • MySQL latin1 は Windows-1252 を意味します
  • PHP 関数 ISO-8859-1 は、ISO-8859-1 を意味します。
  • MySQL 以外の場合、Windows-1252 は Windows-1252 を意味します。
于 2013-03-29T12:11:38.037 に答える